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

Azure CDN环境下非www域名重定向出现循环问题求助

问题分析与解决方案

出现301 Too many redirects循环的核心原因是:Azure CDN Classic默认回源时使用的是源服务器的主机头,而非用户请求的实际主机名,导致NGINX无法正确区分example.com和www.example.com的回源请求,触发重复重定向。以下是几种可行的解决方法:

方案一:在CDN层面配置重定向(推荐)

直接在Azure CDN规则引擎中设置重定向规则,无需回源到NGINX,避免循环且更高效:

  1. 登录Azure门户,进入你的Microsoft CDN Classic配置文件
  2. 打开规则引擎页面
  3. 添加新规则:
    • 匹配条件:选择「主机名」,运算符「等于」,值填写example.com
    • 动作:选择「URL重定向」
    • 重定向类型:选择301(永久重定向)
    • 目标协议:HTTPS
    • 目标主机名:www.example.com
    • 目标路径:保留原始路径(使用{URL}变量)
  4. 保存规则,等待15-60分钟让CDN配置生效

方案二:修正CDN回源主机头设置

调整CDN回源时的主机头,让NGINX能正确识别www.example.com的请求:

  1. 登录Azure门户,找到你的CDN端点
  2. 进入「配置」选项卡
  3. 在「源主机头」处选择「自定义」,输入www.example.com
  4. 保存配置,等待生效

同时确保NGINX有正确处理www.example.com的server块:

server {
    listen 8080;
    listen [::]:8080;
    server_name www.example.com;

    location / {
        # 这里填写你的业务逻辑,比如反向代理到后端应用
        proxy_pass http://your-backend-service;
        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-Proto $scheme;
    }
}

方案三:调整NGINX配置识别CDN回源请求

通过CDN发送的X-Forwarded-Host头部判断原始请求主机名,避免错误重定向:

server {
    listen 8080;
    listen [::]:8080;
    server_name example.com;

    # 针对CDN回源的请求,通过X-Forwarded-Host判断原始主机名
    if ($http_x_forwarded_host = example.com) {
        return 301 https://www.example.com$request_uri;
    }

    # 处理直接访问example.com的非CDN请求
    return 301 https://www.example.com$request_uri;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:12:51