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

Nginx反向代理重定向时路径前缀缺失问题求助

Nginx反向代理重定向路径前缀缺失问题解决

当前配置下,访问myservername.com/mywebsite可正常转发至http://mybackendwebsite.com:1234/,但后端返回重定向时,路径前缀mywebsite未被追加,导致跳转至错误的myservername.com/myredirectedpath,期望目标为myservername.com/mywebsite/myredirectedpath,添加proxy_redirect http://mybackendwebsite.com/ /mywebsite;后问题未解决,可通过以下方式调整:

方法一:完善proxy_redirect规则匹配覆盖所有情况

后端返回的重定向可能存在两种形式:带自身域名的绝对URL,或仅路径的相对URL。原规则只匹配了带后端域名的情况,需补充匹配相对路径的规则:

location ^~ /mywebsite {
    rewrite ^/mywebsite(/.*)$ $1 break;
    proxy_pass http://mybackendwebsite.com:1234/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # 同时匹配后端域名开头和根路径开头的重定向
    proxy_redirect http://mybackendwebsite.com/ /mywebsite/;
    proxy_redirect / /mywebsite/;
}

方法二:通过请求头让后端自行生成带前缀的重定向

如果后端支持X-Forwarded-Prefix请求头,可以在代理时添加该头,告知后端当前的路径前缀,让后端直接生成包含/mywebsite的重定向URL:

location ^~ /mywebsite {
    rewrite ^/mywebsite(/.*)$ $1 break;
    proxy_pass http://mybackendwebsite.com:1234/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # 传递路径前缀给后端
    proxy_set_header X-Forwarded-Prefix /mywebsite;
}

方法三:调整proxy_pass写法,让Nginx自动处理路径映射

如果可以接受后端接收带/mywebsite前缀的请求(即去掉原rewrite规则),可直接调整proxy_pass的格式,让Nginx自动处理重定向的路径替换:

location ^~ /mywebsite {
    proxy_pass http://mybackendwebsite.com:1234;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # 使用默认重定向规则,Nginx会自动替换路径前缀
    proxy_redirect default;
}

注:此方法下,访问myservername.com/mywebsite/path会转发至http://mybackendwebsite.com:1234/mywebsite/path,若后端不需要该前缀,建议使用前两种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:28:30