nginx适配不同网络拓扑的关键在于合理组织upstream、精准设置proxy参数及按需启用stream模块;支持同网段、跨子网、双ip和四层透传等结构,差异仅在于配置逻辑与网络可达性保障。

配置 Nginx 负载均衡器适配不同网络拓扑,关键不在“改代码”,而在于合理组织 upstream、精准设置 proxy 参数、按需启用 stream 模块。同一套 Nginx 可支撑同网段、跨子网、双 IP、甚至四层透传等结构,区别只在配置逻辑和网络可达性保障。
同网段基础负载均衡(最简场景)
所有后端服务器与 Nginx 位于同一局域网(如 192.168.1.0/24),路由直连,延迟低,配置最轻量:
- 在
/etc/nginx/nginx.conf的http块内定义upstream,IP 可直接写内网地址,无需额外路由或 NAT - 推荐使用
weight区分服务器性能差异,例如高性能节点设weight=5,普通节点保持默认 1 -
proxy_set_header必须保留,尤其X-Real-IP和X-Forwarded-For,否则后端无法识别真实客户端
跨子网或不同网段部署(如前后端分离网络)
当 Nginx 与后端服务器处于不同子网(如 Nginx 在 192.168.10.10,Tomcat 在 172.16.8.0/24 或 10.0.5.0/24),需确保三层可达并规避地址转换问题:
- 确认中间路由器/防火墙已开通对应端口(如 80/8080)的双向通信,禁用 SNAT 或 MASQUERADE,避免后端看到的源 IP 全是 Nginx 的出口 IP
- upstream 中必须写后端服务器的实际可达 IP + 端口(如
server 172.16.8.76:8080),不能依赖 DNS 别名(除非已配好内网 DNS) - 若后端服务监听非标准端口(如 8080、8000),
proxy_pass必须显式带端口,否则默认走 80
双 IP 或浮动 IP 架构(高可用前置)
为提升 Nginx 自身可靠性,常将两台 Nginx 配成主备,共用一个虚拟 IP(VIP),此时负载均衡配置本身不变,但需关注接入层一致性:
- 两台 Nginx 的
upstream配置必须完全一致,包括 server 列表、weight、max_fails、fail_timeout 等参数 - 建议启用
ip_hash或hash $remote_addr consistent,避免 VIP 切换时用户会话漂移 - 检查
keepalived或类似工具的健康检查脚本,确保仅在 Nginx 进程存活且配置重载成功后才接管 VIP
四层 TCP/UDP 负载均衡(非 HTTP 场景)
数据库、游戏服务、IoT 设备接入等场景不走 HTTP 协议,需启用 Nginx 的 stream 模块,配置独立于 http 块:
- 确认 Nginx 编译时已加载
ngx_stream_module.so(可通过nginx -V 2>&1 | grep stream验证) - 在
nginx.conf顶层(events 同级)添加stream { ... }块,内部定义upstream和server监听 - 支持
proxy_timeout、proxy_responses等连接级控制,但不支持 header 修改、重写、SSL 终止等七层功能











