Nginx反向代理去除路径前缀rewrite写法 Nginx
前言
前端访问 /api/xxx,后端只认 /xxx,需要代理时去掉 /api 前缀。proxy_pass 带不带结尾斜杠决定是否透传路径,配合 rewrite 可精确控制。本文讲解斜杠差异、rewrite 去前缀和保留 query 参数。
操作步骤
1. proxy_pass 带斜杠自动去前缀
location /api/ {
proxy_pass http://127.0.0.1:8080/;
}
访问 /api/user → 后端收到 /user。
2. 不带斜杠则原样透传
location /api/ {
proxy_pass http://127.0.0.1:8080;
}
后端收到 /api/user。
3. 用 rewrite 精确改写
location /api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:8080;
}
4. 保留查询参数
rewrite 末尾加 ? 或让 proxy_pass 自动带 $args:
rewrite ^/api/(.*)$ /$1? break;
5. 校验并重载
nginx -t && nginx -s reload
6. 验证后端收到的路径
curl -i https://域名/api/user
常见坑
- proxy_pass 结尾斜杠写错,去前缀行为相反。
- rewrite 后忘记 break,继续匹配其他 location。
- 重写把 query 参数丢掉,接口报参数缺失。
- 正则捕获组写错,路径被截断。
- 后端返回的重定向 Location 不带前缀,浏览器 404。
- WebSocket 场景改写要保留 Upgrade 头。
- 多版本前缀 /v1/ /v2/ 分别写 location。
总结
去前缀先看 proxy_pass 斜杠:带 / 自动剥离 location 前缀,不带则原样传;复杂改写用 rewrite ^/api/(.*)$ /$1 break。注意 break、保留 $args,改完 curl 核对后端实际路径。
遇到问题加QQ23979811 协助处理