关键在location匹配方式与proxy_pass末尾斜杠组合:二者均带斜杠时自动剥离前缀;location带斜杠而proxy_pass不带则透传完整路径;正则location中proxy_pass不可带uri路径,需用rewrite配合。

关键在 location 匹配方式和 proxy_pass 末尾斜杠的组合,它直接决定路径是否被截断、如何拼接。
location 和 proxy_pass 都带斜杠(推荐常用)
这种写法最清晰,能自动剥离匹配前缀:
- 配置示例:location /api/ { proxy_pass http://127.0.0.1:8080/; }
- 访问 /api/user/list → 转发到 http://127.0.0.1:8080/user/list
- 原理:proxy_pass 以
/结尾时,Nginx 会用目标地址完全替换掉 location 匹配到的部分(即/api/)
location 带斜杠但 proxy_pass 不带斜杠(保留原始路径)
适合需要把完整请求路径(含前缀)透传给后端的场景:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 配置示例:location /v2/ { proxy_pass http://127.0.0.1:9000; }
- 访问 /v2/order/create → 转发到 http://127.0.0.1:9000/v2/order/create
- 注意:后端服务必须能处理带
/v2/前缀的路由,否则可能 404
正则匹配 location 中 proxy_pass 的限制
用 ~ 或 ~* 写正则时,proxy_pass 后不能带 URI 路径(即不能写 /path/):
- ✅ 正确:location ~ ^/files/(.+)$ { proxy_pass http://127.0.0.1:8080; }
- ❌ 错误:location ~ ^/files/(.+)$ { proxy_pass http://127.0.0.1:8080/static/; }(Nginx 启动报错)
- 如需重写路径,应配合 rewrite + break 使用,例如:
rewrite ^/files/(.+)$ /static/$1 break;
proxy_pass http://127.0.0.1:8080;
避免常见陷阱
几个高频出错点要特别留心:
- location
/api(不带尾部斜杠)和/api/(带尾部斜杠)匹配范围不同:前者会匹配/api、/apixxx等,后者只匹配以/api/开头的路径 - proxy_pass 中使用变量(如
$scheme://$host:8080)时,末尾斜杠行为失效,Nginx 会按相对路径处理 - 多个 location 冲突时,优先级是:
=(精确)>^~(最长前缀且禁正则)> 正则(按配置顺序)> 普通前缀










