nginx反向代理核心是proxy_pass指令,末尾斜杠决定uri重写规则;需配置proxy_set_header传递真实ip、协议等头信息,并用proxy_redirect和proxy_cookie_path修正重定向与cookie路径。

在 Nginx 中配置反向代理,核心就是用 proxy_pass 指令把客户端请求准确转发到后端应用服务。它不是简单写个地址就行,路径处理、协议适配、头信息传递等细节直接影响服务是否可用。
proxy_pass 的基本写法和路径映射规则
关键点在于末尾斜杠(/)是否出现,它决定 Nginx 如何重写 URI:
-
带末尾 /:如
proxy_pass http://127.0.0.1:8080/;→ 请求/api/users会被转发为http://127.0.0.1:8080/api/users -
不带末尾 /:如
proxy_pass http://127.0.0.1:8080;→ 请求/api/users会被转发为http://127.0.0.1:8080/api/users(行为相同) -
带路径前缀:如
proxy_pass http://127.0.0.1:8080/backend/;→ 请求/api/users会变成http://127.0.0.1:8080/backend/api/users
必须配合的常用代理头设置
后端服务常依赖原始请求信息(如真实 IP、协议类型),默认不传会导致 400、跳转异常或日志失真。需在 location 块中显式添加:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
-
proxy_set_header Host $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,影响重定向和资源链接生成
处理后端响应重定向和 Cookie 路径
如果后端返回 302 重定向或 Set-Cookie 带路径,原始 Location 或 Path 可能指向内部地址或错误路径,需主动改写:
-
proxy_redirect http://127.0.0.1:8080/ /;—— 将后端返回的重定向地址中的内部路径替换为公网路径 -
proxy_cookie_path /backend/ /;—— 修正 Cookie 的 Path 属性,确保浏览器正确携带 - 若后端是 Java 应用且部署在子路径(如 Tomcat 的
/app上下文),还需加proxy_redirect /app/ /;
完整可运行的示例配置
以下是一个常见 Web 应用(监听 8080 端口)通过 Nginx 反代到 /myapp 路径的典型配置片段:
location /myapp/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect http://127.0.0.1:8080/ /myapp/;
proxy_cookie_path / /myapp/;
}
注意:proxy_redirect 和 proxy_cookie_path 的值要严格匹配前端暴露路径与后端实际路径的关系。










