You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx服务器块匹配异常:公网IP访问匹配内网IP块原因解析

Nginx公网IP访问匹配内网IP Server块的原因解析

场景回顾

云服务器公网IP为8.130.104.xxx,内网IP为172.16.38.191,Nginx配置了两个server块,分别监听公网IP和内网IP的80端口,且server_name均为example.org。使用公网IP访问时,请求却匹配了内网IP对应的server块,返回的server_addr为内网IP。

核心原因:云服务器公网IP的NAT映射机制

云服务商提供的公网IP大多并非直接绑定在服务器的物理网卡上,而是通过NAT(网络地址转换)网关实现流量转发:

  • 外部用户发起的公网IP请求,首先到达云平台的NAT网关
  • NAT网关会将请求的目的IP替换为服务器的内网IP,再转发到服务器
  • 服务器的Nginx收到请求时,请求的目标IP是内网IP172.16.38.191,因此只会匹配监听该内网IP的server块,监听公网IP的server块根本不会收到这个请求

Nginx内部匹配逻辑验证

Nginx的server块匹配遵循以下优先级:

  1. 优先匹配请求的目标IP:端口:只有当请求的目标IP和端口与listen指令配置的地址完全一致时,才会进入该server块的后续匹配
  2. 若多个server块匹配同一IP:端口,再根据Host头匹配server_name
  3. 无匹配server_name时,使用该IP:端口上的默认server

在这个场景中,请求经过NAT转换后目标IP变为内网IP,第一步就命中了内网IP的server块,因此不会触发公网IP server块的匹配逻辑。

额外验证方式

可以通过服务器上的netstat命令查看Nginx的实际监听端口:

netstat -tulpn | grep nginx

如果公网IP8.130.104.xxx并未出现在监听列表中,说明Nginx无法绑定到该公网IP(因为网卡未配置该IP),进一步验证了NAT映射的结论。

内容的提问来源于stack exchange,提问作者hejun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 13:25:08