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

Nginx通过proxy.ru中转代理接口遇重定向问题求助

问题分析与修正方案

你的核心问题在于原配置没有正确传递请求路径,且未处理后端返回的重定向响应,导致浏览器地址栏跳转。以下是修正后的完整配置及关键说明:

修正后的site1.ru Nginx配置

location /api/ {
    # 正确传递/api路径到proxy.ru,确保请求路径匹配site2.ru的API
    proxy_pass http://proxy.ru/api/;
    # 告诉proxy.ru目标后端是site2.ru
    proxy_set_header Host site2.ru;
    # 传递客户端真实IP和协议信息,避免后端因协议不匹配返回错误重定向
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    # 拦截后端返回的重定向响应,自动替换Location中的site2.ru为site1.ru
    proxy_redirect https://site2.ru/ https://site1.ru/;
    proxy_redirect http://site2.ru/ https://site1.ru/;

    # 可选:如果后端响应内容中存在硬编码的site2.ru链接,自动替换为site1.ru
    sub_filter 'site2.ru' 'site1.ru';
    sub_filter_once off;
}

关键配置说明

  1. 路径传递修正
    原配置中proxy_pass http://proxy.ru;会将https://site1.ru/api/xxx转发为http://proxy.ru/xxx,丢失了/api前缀,导致proxy.ru或site2.ru可能因路径不匹配返回重定向。加上/api/后,请求路径会完整传递为http://proxy.ru/api/xxx,与site2.ru的API路径对齐。

  2. 重定向拦截处理
    当site2.ru返回301/302重定向时,响应头的Location字段会包含site2.ru域名,proxy_redirect指令会自动将该字段中的域名替换为site1.ru,确保浏览器跳转时地址栏保持site1.ru。

  3. 响应内容替换(可选)
    如果后端API返回的JSON、HTML等内容中存在硬编码的site2.ru链接,sub_filter会全局替换为site1.ru,避免用户点击后跳转到目标站点。需要注意:使用该功能需确保Nginx编译时包含http_sub_module模块(大部分发行版默认包含)。

补充:proxy.ru的配套配置(若需)

如果proxy.ru本身需要配置反向代理到site2.ru,可参考以下示例:

location /api/ {
    proxy_pass https://site2.ru/api/;
    proxy_set_header Host site2.ru;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:27:10