proxy_pass后斜杠决定路径替换或原样转发:带斜杠则替换location前缀,如/api/users→/users;不带则原样追加,易致404;正则匹配时必须显式写路径;复杂改写需配合rewrite。

关键就看 proxy_pass 后面那个斜杠——它不是格式问题,而是决定路径是“替换”还是“原样转发”的开关。配错一个字符,后端就收不到正确路径,404 就跟着来了。
proxy_pass 带斜杠:用指定路径替换 location 匹配部分
这是最常用、也最推荐的方式,适合后端服务监听根路径(比如 Spring Boot 默认跑在 /)的场景。
- location 中匹配到的前缀(如 /api/)会被完整移除
- proxy_pass 后的路径(哪怕只是 /)会作为新起点,拼接剩余 URI
- 请求 /api/users → 后端收到 /users
- 请求 /api/v2/profile → 后端收到 /v2/profile
配置示例:
location /api/ {
proxy_pass http://backend/;
}
proxy_pass 不带斜杠:原样追加完整请求路径
这种写法会让 Nginx 把客户端原始 URI(包括 location 匹配的部分)直接拼到后端地址后,容易导致 404,除非后端明确要求保留前缀(比如后端部署在 /api 上下文里)。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 请求 /api/users → 后端收到 /api/users
- 如果后端路由只定义了 /users,那就会 404
- 不建议用于标准前后端分离架构
配置示例:
location /api/ {
proxy_pass http://backend;
}
正则或精确匹配时,proxy_pass 必须显式带路径
当 location 使用 =、~ 或 ~* 时,Nginx 无法自动推断要截掉多少路径,必须手动写出目标 URI。
- 错误写法:location ~ ^/static/ { proxy_pass http://cdn; }(Nginx 启动失败)
- 正确写法:location ~ ^/static/(.+)$ { proxy_pass http://cdn/$1; }
- 健康检查也适用:location = /health { proxy_pass http://backend/health; }
用 rewrite 配合 proxy_pass 实现复杂路径改写
默认替换逻辑不够用时(比如需要调整路径层级顺序),rewrite 可以先重写 URI,再交给 proxy_pass 转发。
- 把 /v2/api/users 改成 /api/v2/users:
location /v2/api/ {
rewrite ^/v2/api/(.*)$ /api/v2/$1 break;
proxy_pass http://backend/;
} - break 很关键,避免 rewrite 后再次被其他 location 规则匹配
- 注意 rewrite 的正则捕获和 $1 引用要准确对应










