Nginx 统一为后端 API 加前缀(如 /api/v1/)的核心是 location 匹配与 proxy_pass 路径替换:location /api/v1/ { proxy_pass http://backend/; } 可自动剥离前缀,使请求 /api/v1/users 转发至 http://backend/users,后端无需修改;若 proxy_pass 末尾无 /,则会错误转发为 http://backend/api/v1/users;需注意 location 顺序和优先级,推荐使用 ^~ /api/v1/ 防止误匹配。

在 Nginx 中给所有后端 API 接口统一加前缀(比如把 /user、/order 等路径全部前置为 /api/v1/),核心不是“重写前端请求”,而是通过 location 匹配 + proxy_pass 的路径替换机制来实现,关键在于斜杠的有无和位置。
用带尾部斜杠的 location + proxy_pass 尾部斜杠做路径剥离
这是最常用、最可靠的方式。当 location 和 proxy_pass 都以 / 结尾时,Nginx 会自动剥离 location 匹配的部分,再拼接到后端地址后:
location /api/v1/ { proxy_pass http://backend/; }- 请求
GET /api/v1/users→ 匹配/api/v1/,剥离后剩余users - 转发到后端:
http://backend/users(不是/api/v1/users)
这样后端服务完全无需感知前缀,仍按原路径(如 /users)开发即可。
避免不带尾斜杠导致的路径拼接错误
如果写成 proxy_pass http://backend;(末尾无 /),Nginx 会把完整匹配路径(包括 /api/v1/)原样追加过去:
location /api/v1/ { proxy_pass http://backend; }- 请求
/api/v1/users→ 转发为http://backend/api/v1/users - 后端必须暴露
/api/v1/users接口,否则 404
这违背了“统一加前缀”的初衷,也增加了后端适配成本,应避免。
配合 rewrite 做更灵活的路径标准化(可选)
若需兼容旧路径(如允许直接访问 /users 同时也支持 /api/v1/users),可用 rewrite 统一归一化:
location ^~ /api/v1/ { rewrite ^/api/v1/(.*)$ /$1 break; proxy_pass http://backend; }location / { rewrite ^/(.*)$ /$1 break; proxy_pass http://backend; }
注意:break 表示仅内部重写,不发起新请求;搭配 proxy_pass 使用时,务必确认后端能处理去前缀后的路径。
确保 location 优先级不被干扰
加前缀的规则要放在通用规则之前,防止被更宽泛的 location / 拦截:
- ✅ 正确顺序:
location /api/v1/→location /static/→location / - ❌ 错误顺序:
location /写在最前,会导致所有请求都命中它,/api/v1/永远不生效
另外,若想严格限定只匹配该前缀(不匹配 /api/v1x 这类误写),可用 ^~ /api/v1/,它比正则优先且不回退检查。


















