proxy_pass末尾斜杠是行为开关:不加则保留原始URI路径,加则移除location前缀再拼接;带路径不加斜杠会导致路径粘连,加斜杠则安全重写。

proxy_pass 路径末尾加不加斜杠,不是格式问题,而是行为开关——它直接决定 Nginx 怎么处理请求路径:是原样拼过去,还是把 location 前缀砍掉再贴上去。一个字符写错,后端就收不到正确路径,接口全 404。
proxy_pass 不带任何路径(如 http://backend)
这是最“老实”的写法:Nginx 不做任何路径修改,把整个原始请求 URI 完整拼到 proxy_pass 后面。
- location /api/ { proxy_pass http://127.0.0.1:3000; }
- 用户请求 /api/users → 后端收到 /api/users
- 适用场景:后端服务本身也以 /api 为上下文启动(比如 Tomcat 部署在 /api 路径下)
- 风险点:如果后端监听的是根路径,这个配置会让所有请求都带 /api 前缀,必然 404
proxy_pass 以斜杠结尾(如 http://backend/)
这是最常用、最推荐的写法。Nginx 会把 location 匹配的完整前缀(比如 /api/)彻底移除,只把剩余路径追加到 / 后面。
- location /api/ { proxy_pass http://127.0.0.1:3000/; }
- 用户请求 /api/users → 后端收到 /users
- 用户请求 /api/v2/login → 后端收到 /v2/login
- 适用场景:前后端分离架构,后端是 Spring Boot、Express 等默认跑在根路径的服务
- 关键提醒:location 写成 /api 或 /api/ 效果一致,只要 proxy_pass 末尾有 /,前缀就被替换
proxy_pass 带路径但不以斜杠结尾(如 http://backend/v1)
这种写法容易出 bug。Nginx 会把 location 匹配部分整个替换成 /v1,且**不自动加斜杠分隔**,导致路径粘连。
- location /api/ { proxy_pass http://127.0.0.1:3000/v1; }
- 用户请求 /api/users → 后端收到 /v1users(不是 /v1/users!)
- 原因:/api/ 被替换成 /v1,后面紧接 users,中间没分隔符
- 建议:除非明确需要这种粘连效果,否则应避免;如需映射到 /v1,改用 http://127.0.0.1:3000/v1/
proxy_pass 带路径且以斜杠结尾(如 http://backend/v1/)
这是最清晰可控的路径重写方式。Nginx 仍执行前缀替换,但拼接更安全,语义也更明确。
- location /service/api/ { proxy_pass http://127.0.0.1:3000/v1/; }
- 用户请求 /service/api/profile → 后端收到 /v1/profile
- location 中的 /service/api/ 被整体替换成 /v1/,剩余路径自然衔接
- 优势:路径意图一目了然,避免歧义,适合多级 API 版本管理或微服务网关场景











