出于某种原因,127.xxx.xxx.xxx范围内的任何本地IP地址将redirect回默认的“Welcome to nginx!” 页。
根据我对Apache的经验,只有127.0.0.1的IP地址才能parsing到Apache Web服务器。
我怎样才能让Nginx只能在127.0.0.1地址上运行?
谢谢,
本
你有两个单独的问题 – 首先,多个地址(127.0.0.1/8)被保留用于回送 – 但是,这只能解释为什么诸如127.0.0.2的地址仍然会指向您的计算机。
第二个问题是NginX默认绑定到所有可用的地址。 该设置由listen指令定义。
您可以通过查看netstat -pant | grep nginx来validationnetstat -pant | grep 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
(使用curltestingCentOS 6.2,Nginx 1.2,在更改之后,尝试连接到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那么它会使用那个)。
根据RFC 1122的1.3.2.3(寻址),整个块127.0.0.0/8被保留用于环回; 您应该避免使用bogon IP地址,特别是RFC 5735中定义的特殊用途,用于私人寻址以外的某些目的,因为结果可能是未定义的。