Назад | Перейти на главную страницу

Nginx: все локальные IP-адреса перенаправляются на Nginx

По какой-то причине любой локальный IP-адрес в диапазоне 127.xxx.xxx.xxx перенаправляет обратно на значение по умолчанию «Добро пожаловать в nginx!». страница.

По моему опыту работы с Apache, только IP-адрес 127.0.0.1 разрешается обратно на веб-сервер Apache.

Как заставить Nginx работать только с адресом 127.0.0.1?

Спасибо,

Бен

У вас есть две отдельные проблемы - во-первых, несколько адресов (127.0.0.1/8) зарезервированы для обратной связи - однако это только объясняет, почему такой адрес, как 127.0.0.2, по-прежнему будет указывать на ваш компьютер.

Вторая проблема заключается в том, что NginX по умолчанию привязывается ко всем доступным адресам. Этот параметр определяется listen директива.

Вы можете убедиться, что NginX действительно привязан ко всем адресам, посмотрев на netstat -pant | grep nginx, который может показывать что-то вроде:

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

Обратите внимание 0.0.0.0:80 под локальным адресом, что означает привязку ко всем адресам.

Если вы измените ВСЕ блоки сервера, чтобы иметь директиву прослушивания, которая явно указывает адрес для привязки (например, listen 127.0.0.1:80) должно получиться следующее:

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

(Протестировано с CentOS 6.2, Nginx 1.2, с использованием curl - после внесения изменения попытка подключения к 127.0.0.2 (или любому другому адресу, отличному от 127.0.0.1), приводит к: curl: (7) couldn't connect to host)

Примечание: вы должны явно установить директиву прослушивания для всех блоков сервера, иначе NginX по-прежнему будет прослушивать все адреса. Директива прослушивания по умолчанию (т.е. когда она опущена): listen *:80 и NginX будет пробовать каждый доступный серверный блок и использовать «наилучшее соответствие», даже если server_name не совпадает (если вы укажете listen ... default тогда он будет использовать тот).

Согласно разделу 1.3.2.3 (Адресация) RFC 1122, весь блок 127.0.0.0/8 зарезервирован для обратной связи; вам следует избегать использования bogon IP-адресов, особенно специальных, как определено в RFC 5735, для каких-либо целей, кроме частной адресации, поскольку результаты могут быть неопределенными.