Я хотел бы указать сервер nginx, который прослушивает только внешний IP-адрес хоста, указанного в listen
директива. У моего сервера есть доменное имя foobar.example.com
который разрешается в общедоступный IP 1.2.3.4
.
Когда я настраиваю сервер nginx следующим образом
server {
#listen 3330;
listen foobar.example.com:3330;
server_name foobar.example.com;
location / {
proxy_pass http://127.1.0.1:3330;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
он слушает 127.0.0.1:3330
хотя. Это почему? Как я могу привязать его к 1.2.3.4:3330
вместо этого без жесткого кодирования IP-адреса в файле конфигурации?
# dig +noall +answer foobar.example.com
foobar.example.com. 2648 IN A 1.2.3.4
# dig +noall +answer -x 1.2.3.4
4.3.2.1.in-addr.arpa. 2828 IN PTR foobar.example.com.
# dig +noall +answer -x 127.0.0.1
1.0.0.127.in-addr.arpa. 0 IN PTR foobar.example.com.
1.0.0.127.in-addr.arpa. 0 IN PTR foobar.
Просто к сведению: когда я использую только listen 3330
а остальное оставьте без изменений, nginx слушает 0.0.0.0:3330
и, как вы подозреваете, ад начинается по первому запросу http://foobar.example.com:3330
. :-)
Оказывается, проблема заключалась в том, что я оставил следующее в /etc/hosts
127.0.0.1 localhost foobar.example.com.
и я уже забыл, как он туда попал. :-) Удаление foobar.example.com.
псевдоним 127.0.0.1 заставил nginx, настроенный с помощью приведенного выше фрагмента, прослушивать внешний IP-адрес только так, как я ожидал.