proxy_pass路径转发逻辑取决于末尾斜杠:带/则截前缀拼剩余路径,不带/则保留完整匹配路径;正则location必须显式指定完整uri;需配置host、x-real-ip、x-forwarded-for、x-forwarded-proto等代理头。

proxy_pass 的路径转发逻辑,核心就一条:看它后面跟的 URL 有没有以 / 结尾。
proxy_pass 后带斜杠(/):截前缀、拼剩余路径
当 proxy_pass 值以 / 结尾时,Nginx 会把 location 匹配到的前缀部分完全去掉,只把客户端请求中“匹配之后的部分”拼接到目标地址末尾。
- 例如:location /api/ { proxy_pass http://127.0.0.1:3000/api/; }
- 访问 /api/users → 实际发给后端的是 http://127.0.0.1:3000/api/users
- 访问 /api/v2/posts → 实际是 http://127.0.0.1:3000/api/v2/posts
这种写法适合后端服务本身也挂载在 /api 路径下,能保持前后路径结构一致。
proxy_pass 后不带斜杠:保留完整匹配路径
如果 proxy_pass 后面没有 /(比如只写 http://127.0.0.1:3000),那么 Nginx 就不会删前缀,而是把整个匹配到的 location 路径原样加在目标地址后面。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 例如:location /api/ { proxy_pass http://127.0.0.1:3000; }
- 访问 /api/users → 实际发给后端的是 http://127.0.0.1:3000/api/users
- 注意:此时后端必须能处理
/api/xxx这类带前缀的路径,否则可能 404
location 用正则时,proxy_pass 不能省略 URI
只要 location 是用 ~、~* 或 ^~ 这类修饰符写的,proxy_pass 后面就必须显式写出完整目标地址,包括协议、主机、端口,以及可选的路径(哪怕只是 /)。
- ✅ 正确:location ~ ^/v1/ { proxy_pass http://127.0.0.1:8080/; }
- ❌ 错误:location ~ ^/v1/ { proxy_pass http://127.0.0.1:8080; }(会报配置错误)
因为正则匹配不具确定性,Nginx 无法自动推断是否要截前缀,所以必须由你明确指定转发后的 URI 形式。
别漏掉关键代理头,否则后端可能“失明”
默认情况下,Nginx 转发时会改写 Host 头、丢掉真实 IP。后端若依赖这些信息,就会出问题——比如重定向跳错域名、日志记错 IP、鉴权失败。
-
Host:加
proxy_set_header Host $host;,让后端看到原始请求的域名 -
真实 IP:加
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;(尤其 HTTPS 穿透时必需)
这些不是可选项,是生产环境的标配。










