Nginx构建内部负载均衡网关的核心是upstream块定义后端服务组、proxy_pass转发请求,并通过监听内网IP、allow/deny访问控制、X-Real-IP透传及X-Internal-Request标记等实现安全隔离,而非使用internal指令。

Nginx 并没有 internal 指令用于构建负载均衡网关。这是一个常见误解——internal 是 Nginx 的 location 指令修饰符,作用是限制该 location 只能被内部重定向(如 error_page、try_files、rewrite ... last)访问,禁止外部客户端直接请求。它本身不参与路由分发、不定义上游服务、也不提供负载均衡能力。
真正实现内部负载均衡网关的核心组件是:
-
upstream块:定义后端服务器组及负载策略 -
proxy_pass:将请求转发至 upstream 组 - 配合访问控制(如
allow/deny、auth_request或 IP 限制)来保障“内部性”
下面从实际用途出发,说明如何用 Nginx 构建一个仅限内网调用、带负载均衡能力的安全网关:
明确“内部”的含义:网络层隔离 + 访问控制
所谓“内部网关”,关键不是靠某个虚构的 internal 负载指令,而是通过组合手段确保:
- 只监听内网网卡(如 192.168.10.10:80),不绑定公网 IP 或 0.0.0.0
- 在 server 块中显式拒绝非内网请求:
deny all;allow 192.168.10.0/24; - 避免使用
internal修饰 location 来“伪装”安全——它防不住直连 upstream 地址,也不能替代网络策略
配置真正的内部负载均衡 upstream 组
在 http 块中定义后端服务池,支持健康感知与权重调度:
- 用
upstream internal_api命名一组仅限内网访问的后端(如 192.168.10.21:8080、192.168.10.22:8080) - 为每台 server 添加
max_fails=3 fail_timeout=30s,自动剔除故障节点 - 按机器性能设
weight=2或weight=1,实现加权轮询 - 可选加
backup服务器,主集群异常时兜底
用 proxy_pass 对接 upstream,并透传可信头信息
在受控的 server 块中完成代理,同时保证下游服务能识别真实调用方:
- 必须使用
proxy_pass http://internal_api;(名称需与 upstream 一致) - 设置
proxy_set_header X-Real-IP $remote_addr;和X-Forwarded-For,供后端做日志或限流 - 添加
proxy_set_header X-Internal-Request "true";作为内部调用标记,后端可据此放行敏感接口 - 禁用缓存:
proxy_buffering off;(尤其对长连接或流式响应)
增强安全性:不止于 IP 白名单
单纯靠内网 IP 并不绝对可靠,建议叠加轻量级防护:
- 启用
auth_request模块对接内部鉴权服务(如 JWT 校验网关),统一拦截非法请求 - 用
limit_req限制单个内网客户端的请求频次,防内部误用或横向扫描 - 关闭不必要的 header:
proxy_hide_header Server;、proxy_hide_header X-Powered-By; - 若走 HTTPS 内部通信,可在 upstream 中用
https://协议,并配置proxy_ssl_*参数校验证书


















