由于某种原因,127.xxx.xxx.xxx 范围内的任何本地 IP 地址都会重定向回默认的“欢迎使用 nginx!”页面。
根据我使用 Apache 的经验,只有 127.0.0.1 IP 地址可以解析回 Apache Web 服务器。
如何让Nginx只对127.0.0.1地址起作用?
谢谢,
本
答案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 指令(例如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
:)
注意:您必须在所有服务器块上明确设置 listen 指令,否则 NginX 仍将监听所有地址。默认 listen 指令(即省略时)是,listen *:80
NginX 将尝试每个可用的服务器块并使用“最佳匹配”,即使server_name
不匹配(如果您指定,listen ... default
则它将使用该匹配)。
答案2
根据 RFC 1122 的第 1.3.2.3 节(寻址),整个块 127.0.0.0/8 保留用于环回;您应该避免使用虚假 IP 地址,尤其是 RFC 5735 中定义的特殊用途 IP 地址,用于私有寻址以外的其他用途,因为结果可能是未定义的。