nginx反向代理核心是仅开放80/443端口,关闭所有后端端口,通过location路径映射(如/user/→8001)隐藏ip与端口,并透传host、x-real-ip、x-forwarded-for、x-forwarded-proto等关键请求头,辅以proxy_hide_header和根路径限制强化安全。

用 Nginx 做反向代理,核心就是让外部只跟 Nginx 打交道,后端微服务完全不露面——既不暴露 IP 和端口,也不泄露服务间调用关系。
明确代理边界:只开 80/443,关掉所有后端端口
这是隐藏拓扑的第一步。比如你的用户服务跑在 127.0.0.1:8001,订单服务在 127.0.0.1:8002,这些端口必须对公网和内网其他机器关闭(用 iptables 或云安全组限制),只允许 Nginx 进程本地访问。Nginx 本身监听 80 或 443,成为唯一入口。
路径映射代替直连:用 location 区分不同服务
每个微服务通过路径前缀对外提供统一域名下的独立接口:
-
/user/ → 用户服务:
location /user/ { proxy_pass http://127.0.0.1:8001/; }(注意末尾 /,会自动剥离/user前缀) -
/order/ → 订单服务:
location /order/ { proxy_pass http://127.0.0.1:8002/; } -
/auth/ → 认证服务:
location /auth/ { proxy_pass http://127.0.0.1:8003/; }
客户端只需访问 https://api.example.com/user/profile,完全不知道背后是哪个 IP、哪个端口、甚至是否用了 Docker 或 Kubernetes。
补全关键请求头:让后端拿到真实上下文
默认转发会丢失原始信息,必须显式透传:
-
proxy_set_header Host $host;—— 保留原始 Host,避免后端生成错误跳转链接 -
proxy_set_header X-Real-IP $remote_addr;—— 提供真实客户端 IP -
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;—— 支持多层代理链路追踪 -
proxy_set_header X-Forwarded-Proto $scheme;—— 告诉后端当前是 http 还是 https,避免混合内容问题
进阶防护:防止绕过代理直接访问后端
即使端口已关闭,也要从协议层加固:
- 在后端服务中检查
X-Forwarded-For或自定义 header(如X-Proxy-By: nginx),拒绝未带该 header 的请求 - Nginx 配置里加
proxy_hide_header X-Powered-By;等敏感响应头,避免泄露技术栈 - 对非预期路径返回 404 或 403:
location / { return 404; },防止根路径暴露目录结构











