我想指定一个 nginx 服务器,该服务器仅侦听指令中给出的主机名的外部 IP 。我的服务器具有解析为公共 IP 的listen
域名。foobar.example.com
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
。:-)
答案1
原来问题是我遗漏了以下内容/etc/hosts
127.0.0.1 localhost foobar.example.com.
我已经忘记它是怎么到那里的了。:-) 删除foobar.example.com.
127.0.0.1 的别名使得使用上述代码片段配置的 nginx 只监听外部 IP,正如我预期的那样。