You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx匹配Location后如何重写URL?内部服务器配置求助

解决Nginx转发时路径前缀去除的问题

我完全懂你遇到的困扰——现在你的Nginx把/api/app/admin完整转发到了http://app/api/app/admin,但你的应用只认/admin对吧?这其实是Nginx代理路径匹配的小细节没处理好,给你两个简单靠谱的解决方案:

方法1:利用proxy_pass末尾的斜杠自动替换路径

这是最简洁的方式,只需要调整proxy_pass的地址,加上末尾的斜杠就行:

upstream app{ 
    server app:8000; 
} 
server { 
    listen 80; 
    location /api/app/ { 
        proxy_pass http://app/;  # 重点:这里末尾加了斜杠!
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_set_header Host $host; 
        proxy_redirect off; 
    } 
}

原理很直白:当proxy_pass末尾带有斜杠时,Nginx会自动把location匹配到的前缀(也就是/api/app/)替换成这个斜杠,所以/api/app/admin就会被转发成http://app/admin,正好契合你的应用需求。

方法2:用rewrite指令手动重写路径

如果你更倾向于显式控制路径逻辑,可以在location里添加rewrite规则:

upstream app{ 
    server app:8000; 
} 
server { 
    listen 80; 
    location /api/app/ { 
        rewrite ^/api/app/(.*)$ /$1 break;  # 捕获/api/app/后的所有内容,重写到根路径
        proxy_pass http://app; 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_set_header Host $host; 
        proxy_redirect off; 
    } 
}

这个规则的作用是:匹配所有以/api/app/开头的请求,把/api/app/后面的部分(用(.*)捕获)重写成/$1,比如/api/app/admin会被转成/admin,再转发给http://app,最终就是http://app/admin。

两种方法都能解决问题,个人更推荐第一种,因为更简洁且是Nginx原生的路径处理逻辑。记得修改配置后重启Nginx生效哦!

内容的提问来源于stack exchange,提问作者Ayush Pallav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:32:43