Vous avez deux problèmes distincts : tout d'abord, plusieurs adresses (127.0.0.1/8) sont réservées au bouclage, mais cela explique seulement pourquoi une adresse telle que 127.0.0.2 pointe toujours vers votre ordinateur.
Le deuxième problème est que NginX, par défaut, se lie à toutes les adresses disponibles. Ce paramètre est défini par l'option listen
directive.
Vous pouvez vérifier que NginX a, en fait, lié toutes les adresses en regardant dans netstat -pant | grep nginx
qui peut montrer quelque chose comme :
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 12534/nginx
Notez le 0.0.0.0:80
sous l'adresse locale, ce qui signifie lier à toutes les adresses.
Si vous modifiez TOUS vos blocs de serveur pour qu'ils aient une directive listen qui spécifie explicitement l'adresse à laquelle se lier (par ex. listen 127.0.0.1:80
), vous devriez obtenir ce qui suit :
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:81 0.0.0.0:* LISTEN 12536/nginx
(Testé avec CentOS 6.2, Nginx 1.2, en utilisant curl
- Après avoir effectué la modification, si l'on essaie de se connecter à 127.0.0.2 (ou à toute autre adresse autre que 127.0.0.1), on obtient le résultat suivant : curl: (7) couldn't connect to host
)
Remarque : vous devez définir explicitement la directive listen sur tous les blocs serveur, sinon, NginX écoutera toujours sur toutes les adresses. La directive listen par défaut (c'est-à-dire lorsqu'elle est omise) est la suivante listen *:80
et NginX essaiera chaque bloc de serveurs disponibles et utilisera la "meilleure correspondance", même si le serveur server_name
ne correspond pas (si vous spécifiez un listen ... default
alors il utilisera celui-là).