nginx.conf设置server_name不匹配,也能访问?

大家好
我在本机192.168.1.2测试nginx+php部署。
但是nginx.conf中没有配置本机IP,只配置了不存在的iP ,还有hosts域名。

为什么192.168.1.2:8080可以正常访问呢?

阅读 5.6k
2 个回答

Host 不匹配会使用 default ,没有指定 default 那么(相同端口的)第一个就是 default 。

https://nginx.org/en/docs/htt...

The default_server parameter, if present, will cause the server to become the default server for the specified address:port pair. If none of the directives have the default_server parameter then the first server with the address:port pair will be the default server for this pair.

https://nginx.org/en/docs/htt...

In this configuration, nginx first tests the IP address and port of the request against the listen directives of the server blocks. It then tests the “Host” header field of the request against the server_name entries of the server blocks that matched the IP address and port. If the server name is not found, the request will be processed by the default server.

nginx如果没匹配到,就会采用默认值。

也就是当你本机IP访问的时候,都没匹配到,那就会匹配默认值,也就是第一个server。

此时默认的server就是第一个。虽然你没有配置192.168.1.2的IP,但nginx会默认有一个空的server_name。所以你通过192.168.1.2也能访问的。

具体可以阅读下这篇文章:nginx是怎么处理一个请求的?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏