proxy_pass 是 Nginx 在微服务中实现统一入口、路径路由、跨域控制、负载均衡及请求重写的网关核心指令。它通过 location 匹配规则精准分发请求,支持斜杠处理、正则路由、upstream 集群、CORS 统一配置及请求头/响应头重写,屏蔽后端细节并保障高可用与安全性。

在微服务架构中,proxy_pass 是 Nginx 实现统一入口、路由分发和流量管控的核心指令。它不只简单转发请求,而是承担网关职责:把前端请求按路径、域名或规则精准导向对应服务,同时屏蔽后端服务的地址细节和部署差异。
微服务路由分发
每个微服务通常独立部署(如 user-service:8081、order-service:8082),前端无法直连。Nginx 利用 location + proxy_pass 实现路径级路由:
- location /api/user/ { proxy_pass http://user-service:8081/; } —— 结尾带斜杠,自动剥离 /api/user 前缀,转发 /profile → /profile
- location /api/order/ { proxy_pass http://order-service:8082; } —— 结尾无斜杠,保留完整路径,转发 /api/order/list → /api/order/list
- 支持正则匹配:location ~ ^/api/(product|catalog)/(.*)$ { proxy_pass http://$1-service:8083/$2; }
统一跨域与安全控制
微服务分散部署天然引发跨域问题。Nginx 在 proxy_pass 前集中处理 CORS,避免各服务重复配置:
- 添加响应头:add_header 'Access-Control-Allow-Origin' '$http_origin';
- 支持凭据:add_header 'Access-Control-Allow-Credentials' 'true';(需配合具体域名)
- 预检支持:add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
- 所有跨域逻辑收口到 Nginx,后端专注业务,不耦合 HTTP 安全策略
负载均衡与高可用集成
proxy_pass 可直接指向 upstream 块,天然支持多实例负载均衡:
- 定义服务集群:upstream user-svc { server 10.0.1.10:8081; server 10.0.1.11:8081; }
- 路由调用:location /api/user/ { proxy_pass http://user-svc/; }
- 支持轮询、ip_hash、least_conn 等策略,故障自动剔除,无需修改业务代码
请求头与响应重写协同
proxy_pass 单独使用效果有限,常配合其他指令增强可控性:
- 透传原始 Host:proxy_set_header Host $host;(避免后端误判域名)
- 传递真实客户端 IP:proxy_set_header X-Real-IP $remote_addr;
- 修正重定向地址:proxy_redirect http://user-service:8081/ /api/user/;
- 防止后端返回的 Location 头暴露内网地址,确保跳转仍走 Nginx 入口











