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

Nginx重定向异常求助:URL重复追加导致循环重定向如何解决?

解决Nginx重定向无限循环的问题

兄弟,你这问题我太熟了——核心症结就是重定向URL没写完整协议前缀,导致Nginx把它当成相对路径处理,才出现了地址栏URL无限追加的循环!

问题原因拆解

当你写return 301 new.i.p.address/redirect_page/;时,Nginx不会把这段内容识别为独立的新域名,而是会直接把它拼接到当前请求的URL后面。举个实际流程:

  1. 用户访问old.i.p.address,Nginx执行return,地址变成old.i.p.address/new.i.p.address/redirect_page/
  2. 这个新地址仍然匹配当前server的server_name old.i.p.address,所以Nginx会再次执行return,继续拼接路径
  3. 反复循环后,就出现了你看到的URL无限叠加的情况

具体解决方案

只需要给重定向的URL加上完整的http://(或https://)前缀,把它变成绝对URL即可。同时还要注意return指令的位置——因为return会直接终止请求处理,放在server最前面的话,后面的location块都不会生效,需要根据你的实际需求调整:

场景1:全站重定向(所有old域名请求都跳转到新地址)

如果你的需求是把old.i.p.address的所有请求都转向新地址,用这个配置:

server {
    listen 80;
    server_name old.i.p.address;

    # 关键:加上http://前缀,让Nginx识别为独立的绝对URL
    return 301 http://new.i.p.address/redirect_page/;

    # 注意:如果上面的return生效,下面的location块不会被执行
    # 若需要保留部分静态资源处理,需调整return的位置到对应location内
    location = /favicon.ico {
        access_log off;
        log_not_found off;
    }
    location /static {
        alias /home/rob/pcc_django/staticfiles/;
    }
    location / {
        proxy_set_header Host $http_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-Proto $scheme;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

场景2:仅部分路径重定向(保留其他路径原有处理)

如果只是根路径需要跳转,其他路径(比如/static、/si/home/0/)还要保留原有逻辑,那把return放到location /里:

server {
    listen 80;
    server_name old.i.p.address;

    location ~ /si/home/0/ {
        return 301 /si/home/;
    }
    location = /favicon.ico {
        access_log off;
        log_not_found off;
    }
    location /static {
        alias /home/rob/pcc_django/staticfiles/;
    }
    location / {
        # 仅对根路径请求执行重定向
        return 301 http://new.i.p.address/redirect_page/;
        # 若不需要根路径跳转,注释上面的return,恢复原有代理配置
        # proxy_set_header Host $http_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-Proto $scheme;
        # proxy_pass http://unix:/run/gunicorn.sock;
    }
}

测试小技巧

测试阶段建议先用302临时重定向,避免浏览器缓存了301永久重定向规则,导致你修改配置后看不到实时效果,确认没问题再改回301。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:27:26