关键在斜杠——location和proxy_pass结尾是否带/共同决定后端URI:两者都带/时最推荐,Nginx剥离前缀后拼接;location带/而proxy_pass不带/会透传前缀;location不带/而proxy_pass带/易产生双斜杠;正则location中proxy_pass不能带路径,需用rewrite改写。

关键在斜杠——location 路径结尾有没有 /,和 proxy_pass 目标地址结尾有没有 /,共同决定后端收到的 URI 是什么。配错一个斜杠,路径就可能多一段、少一段,甚至多出双斜杠。
location 和 proxy_pass 都带 /(推荐常用)
这是最清晰、最可控的方式,Nginx 会把匹配到的 location 前缀完整剥离,再拼接到 proxy_pass 地址后。
- 配置示例:
location /api/ {
proxy_pass http://127.0.0.1:8080/;
} - 访问
/api/user/list→ 后端收到/user/list - 访问
/api/v2/login→ 后端收到/v2/login - 注意:location 必须以
/结尾,proxy_pass 也必须以/结尾,两者缺一不可
location 带 /,proxy_pass 不带 /(慎用)
这种写法会让后端收到带原始前缀的完整路径,适合后端服务本身部署在子路径下(比如 Spring Boot 的 server.servlet.context-path=/api)。
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
- 配置示例:
location /api/ {
proxy_pass http://127.0.0.1:8080;
} - 访问
/api/upload→ 后端收到/api/upload - 风险:如果后端不期望这个前缀,就会 404 或路由错乱
location 不带 /,proxy_pass 带 /(避免使用)
容易引发双斜杠问题,且行为不稳定。Nginx 会尝试替换,但因匹配不精确,可能产生 //upload 这类非法路径。
- 配置示例:
location /api {
proxy_pass http://127.0.0.1:8080/;
} - 访问
/api/upload→ 后端可能收到//upload(含双斜杠) - 不建议用,除非有明确兼容需求且已充分测试
正则匹配 location 中 proxy_pass 的限制
如果 location 使用了 ~ 或 ~*,proxy_pass 后面不能带 URI 路径(即不能写 /path/),否则 Nginx 会报配置错误。
- ✅ 正确:
location ~ ^/v\d+/ {
proxy_pass http://backend;
} - ❌ 错误:
location ~ ^/v\d+/ {
proxy_pass http://backend/api/;
}(语法不通过) - 需要改写路径时,应配合 rewrite 指令使用

















