nginx内网轮询负载均衡需四层防护:绑定可信内网ip监听、allow/deny白名单访问控制、upstream语义化配置+健康检查、proxy_pass透传x-internal-request等可信标识供后端校验。

要让 Nginx 的轮询负载均衡真正安全地用于后端内网通信,关键不是“配对轮询”,而是把轮询能力嵌入一个受控、隔离、可审计的内网代理链路中。轮询本身不带安全属性,安全靠的是网络层约束 + 访问控制 + 请求标记 + 健康兜底这四层组合。
只监听可信内网地址,切断公网入口
在 server 块中明确绑定内网 IP,拒绝监听 0.0.0.0 或公网网卡:
- 写成
listen 192.168.10.10:80;,而不是listen 80; - 若需多网段,可叠加多个
listen,但每个都必须是内网段 - 配合
server_name使用具体内网域名(如api.internal),避免泛用_
用 allow/deny 实现强访问控制
仅靠绑定内网 IP 不够——同一内网可能有不可信设备。必须叠加显式白名单:
- 在
server或location块中添加:allow 192.168.10.0/24;<br>deny all;
- 顺序不能错:
allow必须在deny all之前,否则全部被拒 - 不推荐用
internal修饰 location 来“假装安全”,它防不住直连 upstream 地址,也不参与访问决策
upstream 组定义要体现内网语义,并启用健康感知
后端节点地址本身就得是内网地址,且配置基础容错机制:
- upstream 名称建议带语义,例如
upstream internal_api - 每个
server行写内网 IP+端口,如192.168.10.21:8080 max_fails=3 fail_timeout=30s; - 避免使用域名(除非内网 DNS 稳定且可控),防止解析失败导致转发中断
- 可加
backup节点,主集群异常时自动切流
proxy_pass 中透传可信标识,供后端校验
后端服务需要明确知道这是“经网关转发的合法内网调用”,不能只信来源 IP:
- 设置
proxy_set_header X-Internal-Request "true";,后端据此放行敏感接口 - 保留真实客户端 IP:
proxy_set_header X-Real-IP $remote_addr;和X-Forwarded-For - 禁用缓存:
proxy_buffering off;,尤其对流式响应或长连接场景 - 避免
proxy_pass http://192.168.10.21:8080;这类直连写法,必须走命名 upstream,便于统一管控











