nginx代理多类型后端服务需按路径精准分流并差异化配置:/api/→api服务(透传ip/禁重定向)、/static/→静态资源(root或cdn)、/admin/→管理后台(session保持)、/ws/→websocket(升级http1.1及upgrade头)、文件服务调大超时;统一upstream负载均衡,注意proxy_pass斜杠影响uri重写及x-forwarded-proto等头设置。

Nginx 代理多类型后端服务,核心在于按请求特征精准分流 + 各类服务适配配置。不是简单堆砌 proxy_pass,而是根据服务性质(API、静态前端、WebSocket、文件服务等)做差异化处理。
按路径区分不同后端类型
最常用也最清晰的方式:用 location 块匹配 URL 路径前缀,把请求导向对应 upstream 或直连地址。
- /api/ → 后端 API 服务:通常走 HTTP,需透传真实 IP 和 Host
- /static/ 或文件后缀 → 静态资源:可直接 root 指向本地目录,或 proxy_pass 到 CDN/对象存储
- /admin/ → 管理后台服务:可能独立部署,单独定义 upstream 并启用 session 保持
- /ws/ 或 /socket.io/ → WebSocket 服务:必须添加 Upgrade 和 Connection 头,否则连接被断开
为每类服务配置关键头与行为
不同后端对请求头、重定向、超时等要求差异大,不能复用同一套 proxy_* 设置。
-
API 服务:设
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for,确保后端拿到真实客户端 IP;加proxy_redirect off避免后端重定向跳转错误 -
前端单页应用(SPA):location / 应配合
try_files $uri $uri/ /index.html,支持 history 路由刷新 -
WebSocket:必须包含
proxy_http_version 1.1、proxy_set_header Upgrade $http_upgrade、proxy_set_header Connection "upgrade" -
文件下载服务:建议调大
proxy_read_timeout和client_max_body_size,避免大文件中断
用 upstream 实现同类型服务的横向扩展
同一类后端若部署多个实例(如多个 API 节点),应统一归入一个 upstream 组,由 Nginx 自动负载均衡。
- 轮询是默认策略,适合无状态服务
- 有状态服务(如带 session 的管理后台)可加
ip_hash保证同一 IP 固定路由 - 关键服务建议配
max_fails=2 fail_timeout=30s做基础健康检查 - 高可用场景可设
backup节点,主节点故障时自动切换
注意路径重写与协议一致性
proxy_pass 后是否带斜杠,直接影响后端接收到的 URI,极易出错。
-
proxy_pass http://127.0.0.1:8080/;(末尾有 /)→/api/user转发为/user -
proxy_pass http://127.0.0.1:8080;(末尾无 /)→/api/user转发为/api/user - HTTPS 站点代理 HTTP 后端时,务必加
proxy_set_header X-Forwarded-Proto $scheme,让后端知道原始协议 - Cookie 路径或域名不匹配时,用
proxy_cookie_path或proxy_cookie_domain修正











