nginx proxy_pass末尾斜杠决定路径处理方式:带/则替换location前缀,不带则原样拼接;例如location /user/ { proxy_pass http://user-srv/; }将/user/profile转发为/profile,而proxy_pass http://user-srv则转发为/user/profile。

用 Nginx 的 proxy_pass 实现多业务入口聚合,核心是把多个后端服务统一暴露在同一个域名或 IP 下,按路径、子域名或请求特征分发流量,同时保证请求头、路径处理和稳定性不丢。
基于路径前缀的聚合路由
这是最常用的方式,适合 API 网关场景。所有业务共用一个域名(如 api.example.com),靠 URL 路径区分服务。
- 写法关键在
proxy_pass末尾是否带/:带斜杠会自动截掉匹配的前缀;不带则原样拼接 - 例如:
location /user/ { proxy_pass http://user-srv/; }→/user/profile转发为/profile到后端 - 若需重写路径(比如把
/v1/order映射成后端的/order),加rewrite指令并配合break - 支持正则匹配,可提取版本号、租户 ID 等信息透传给后端:
location ~ ^/v(?<ver>\d+)/products { proxy_set_header X-API-Version $ver; proxy_pass http://product-srv; }</ver>
基于子域名的业务隔离
适用于各业务需要独立 Cookie 域、SSL 配置或完全解耦的场景,比如 shop.example.com 和 pay.example.com 都由同一台 Nginx 对外提供服务。
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 每个
server块监听相同端口,但用不同server_name区分 - 配置简单清晰,无需路径重写,天然隔离
- 注意:DNS 必须将所有子域名解析到同一台 Nginx 服务器 IP
- 示例:
server_name shop.example.com;→proxy_pass http://shop-backend:8080;
关键请求头必须透传
后端服务依赖原始请求信息做鉴权、日志、跳转等,Nginx 默认不传递,必须显式设置。
-
proxy_set_header Host $host;:保留客户端访问的原始域名,避免后端看到 upstream 名或内网地址 -
proxy_set_header X-Real-IP $remote_addr;和X-Forwarded-For $proxy_add_x_forwarded_for;:确保真实客户端 IP 可被识别 -
proxy_set_header X-Forwarded-Proto $scheme;:告诉后端原始是 HTTP 还是 HTTPS,影响重定向链接生成 - 如需标识网关来源或注入请求 ID,可用
proxy_set_header X-Gateway nginx-api-gw;
稳定性与可观测性不能省
聚合入口一旦出问题,所有业务都会受影响,所以超时、健康检查、限流、日志都要配全。
- 超时三件套要设合理值:
proxy_connect_timeout 5s;、proxy_send_timeout 30s;、proxy_read_timeout 30s; - 用
upstream定义后端组,启用基础健康检查:server 10.0.1.10:8080 max_fails=3 fail_timeout=30s; - 防恶意刷量:配合
limit_conn_zone限制单 IP 连接数 - 日志中加入上游信息:
$upstream_addr、$upstream_response_time、$upstream_status,方便排查慢接口或失败节点










