nginx反向代理需正确配置proxy_pass的协议+主机、路径匹配规则、请求头(host/x-real-ip/x-forwarded-for)、重定向与cookie路径重写、cors处理,并配合upstream实现负载均衡与容错。

Nginx 使用 proxy_pass 实现反向代理,核心是把客户端请求转发给后端服务,并将响应原样返回。关键在于路径匹配、请求头处理和协议兼容性,而不是简单写一行配置就完事。
正确设置 proxy_pass 的 URL 地址
proxy_pass 后面必须是完整的协议+主机(可选端口),例如 http://127.0.0.1:8000 或 http://backend(配合 upstream)。Nginx 不会自动补全协议或默认端口,缺了 http:// 会导致 502 错误。
- 如果 location 用精确匹配(
location = /api),proxy_pass末尾加不加/不影响路径拼接 - 如果 location 是前缀匹配(
location /api/),proxy_pass末尾带/会截掉匹配部分再拼接;不带则原样转发路径 - 错误示例:
proxy_pass http://127.0.0.1;缺少端口或路径,可能被当作http://127.0.0.1/,但后端未必监听根路径
转发时保留原始 Host 和客户端真实 IP
默认情况下,Nginx 转发请求时会把 Host 头改成 proxy_pass 指定的地址,后端可能因此无法识别原始域名。同时,不显式设置 X-Real-IP 和 X-Forwarded-For,后端拿到的 IP 就是 Nginx 本机地址。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 添加
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;支持多层代理链 - 如后端是 Node.js/Express、Django 等框架,需启用信任代理选项才能解析这些头
处理后端重定向和 Cookie 路径问题
后端返回 302 重定向时,Location 头里的地址通常是内部地址(如 http://localhost:8000/login),直接返回给浏览器会失败。同理,Set-Cookie 中的 Path 或 Domain 也可能不匹配前端域名。
- 用
proxy_redirect重写重定向地址,例如proxy_redirect http://localhost:8000/ https://example.com/; - 若后端 Cookie 的 Path 是
/但实际部署在子路径下,可用proxy_cookie_path / /subpath/;修正 - 对跨域场景,确保后端设置了
Access-Control-Allow-Origin,或 Nginx 主动添加 CORS 头(仅限开发或简单需求)
配合 upstream 实现负载均衡与容错
单写 proxy_pass http://127.0.0.1:8000 无法做健康检查或故障转移。推荐用 upstream 块定义后端集群,再在 proxy_pass 中引用名称。
- 定义 upstream 时可加
ip_hash;实现会话保持,或least_conn;分配到连接最少的节点 - 加
max_fails=3 fail_timeout=30s;表示连续失败 3 次后,30 秒内不再发请求过去 - 加
backup;标记备用服务器,仅当其他节点都不可用时才启用 - 搭配
proxy_next_upstream error timeout http_500;可在出错时自动试下一个节点










