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

Nginx привязывается только к внешнему IP (имя хоста: порт)

Я хотел бы указать сервер 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-адрес только так, как я ожидал.