Nginx:所有本地 IP 地址重定向到 Nginx

Nginx:所有本地 IP 地址重定向到 Nginx

由于某种原因,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 *:80NginX 将尝试每个可用的服务器块并使用“最佳匹配”,即使server_name不匹配(如果您指定,listen ... default则它将使用该匹配)。

答案2

根据 RFC 1122 的第 1.3.2.3 节(寻址),整个块 127.0.0.0/8 保留用于环回;您应该避免使用虚假 IP 地址,尤其是 RFC 5735 中定义的特殊用途 IP 地址,用于私有寻址以外的其他用途,因为结果可能是未定义的。

相关内容