Nginx 配置錯誤導(dǎo)致 TOO_MANY_REDIRECTS 的排查方法

TOO_MANY_REDIRECTS(過多重定向)是網(wǎng)站常見錯誤。這個問題會影響用戶訪問和 SEO 收錄。本文會講解 Nginx 配置錯誤導(dǎo)致 TOO_MANY_REDIRECTS 的排查思路與解決方案。

圖片[1]-Nginx 配置錯誤導(dǎo)致 TOO_MANY_REDIRECTS 的排查方法

1. TOO_MANY_REDIRECTS 錯誤原理

瀏覽器訪問網(wǎng)站時,如果服務(wù)器配置了錯誤的重定向規(guī)則,導(dǎo)致請求在多個 URL 之間無限跳轉(zhuǎn)(例如 HTTP 與 HTTPS、帶 www 與不帶 www 之間相互跳轉(zhuǎn)),最終瀏覽器為防止死循環(huán),返回 TOO_MANY_REDIRECTS 錯誤。

常見表現(xiàn):

  • 頁面加載失敗,提示 ERR_TOO_MANY_REDIRECTS
  • F12 開發(fā)者工具 Network 面板顯示重復(fù)的 301 或 302 重定向

2. 排查前的準(zhǔn)備

在排查前,先確認(rèn)以下信息:

  • 網(wǎng)站使用的域名(是否有 www 與非 www 混用)
  • 是否配置了 SSL(HTTPS)
  • 是否使用了 CDN 或反向代理(如 Cloudflare)

3. Nginx 配置導(dǎo)致重定向錯誤的常見原因

3.1 HTTP 與 HTTPS 配置沖突

如果同時配置了 HTTP 自動跳轉(zhuǎn) HTTPS,而 HTTPS 配置又跳回 HTTP,會形成無限循環(huán)。

圖片[2]-Nginx 配置錯誤導(dǎo)致 TOO_MANY_REDIRECTS 的排查方法

典型錯誤示例:

server {
    listen 80;
    server_name example.com;
    return 301 http://example.com$request_uri; # 錯誤:跳轉(zhuǎn)到 http
}

server {
    listen 443 ssl;
    server_name example.com;
    return 301 https://example.com$request_uri;
}

此配置將 HTTP 請求重定向到 HTTP(自身),HTTPS 請求重定向到 HTTPS(自身),沒有完成預(yù)期的 HTTP -> HTTPS 跳轉(zhuǎn)。

3.2 www 與非 www 重定向配置錯誤

當(dāng) www 與非 www 互相跳轉(zhuǎn)時,也會產(chǎn)生 TOO_MANY_REDIRECTS。

錯誤配置示例:

server {
    server_name example.com;
    return 301 http://www.example.com$request_uri;
}

server {
    server_name www.example.com;
    return 301 http://example.com$request_uri;
}

此配置會導(dǎo)致:

  • 訪問 example.com 跳到 www.example.com
  • 訪問 www.example.com 又跳回 example.com
  • 無限循環(huán)

3.3 反向代理與 HTTPS 配置沖突

用了 Cloudflare、寶塔反向代理或 CDN 后,如果沒配好 X-Forwarded-Proto 這個參數(shù),Nginx 可能會認(rèn)錯網(wǎng)址協(xié)議(把 HTTPS 當(dāng)成 HTTP),導(dǎo)致頁面跳轉(zhuǎn)出錯。

解決方法:

在配置文件中添加:

配置文件通常在以下位置之一:

  • nginx / 打開 nginx.conf (主配置文件,不建議直接編輯 server 塊)
圖片[3]-Nginx 配置錯誤導(dǎo)致 TOO_MANY_REDIRECTS 的排查方法
server {
    listen 80;
    server_name example.com www.example.com;

    set $https_off "";
    if ($http_x_forwarded_proto != "https") {
        set $https_off "redirect";
    }
    if ($https_off = "redirect") {
        return 301 https://$host$request_uri;
    }
}

或使用標(biāo)準(zhǔn)方式:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

在 HTTPS 配置中加入:

server {
    listen 443 ssl;
    server_name example.com www.example.com;
    # 配置 SSL 證書...
}

同時在 Nginx 全局配置 fastcgi_params 文件或 server 段內(nèi)添加:

fastcgi_param HTTPS on;

確保反向代理傳遞了 HTTPS 信息。

4. 系統(tǒng)排查流程

下面是排查 TOO_MANY_REDIRECTS 的推薦步驟:

  • 檢查瀏覽器 Network 面板
    查看跳轉(zhuǎn)鏈路,確認(rèn)是 HTTP 與 HTTPS 之間循環(huán),還是 www 與非 www 之間循環(huán)。
  • 查看 Nginx 配置文件
    • 是否存在多個 server_name 重復(fù)配置
    • 是否 return 301 指向了相同域名導(dǎo)致循環(huán)
  • 確認(rèn)反向代理配置 如果使用了 Cloudflare,確認(rèn) “SSL/TLS 模式” 選擇了 Full (strict),避免 Flexible 模式造成循環(huán)。
  • 查看 WordPress 或其他 CMS 設(shè)置 若網(wǎng)站 URL 設(shè)置為 HTTP,但服務(wù)器配置了強制 HTTPS,也可能導(dǎo)致重復(fù)跳轉(zhuǎn)。
圖片[4]-Nginx 配置錯誤導(dǎo)致 TOO_MANY_REDIRECTS 的排查方法
  • 清除瀏覽器與 CDN 緩存 有時配置已修改,但緩存沒有更新,還是顯示舊的錯誤。

總結(jié)

TOO_MANY_REDIRECTS 是 Nginx 配置中常見問題,關(guān)鍵是 避免重定向循環(huán)。檢查 HTTP 與 HTTPS、www 與非 www 配置,結(jié)合 Web 服務(wù)器、CDN 和應(yīng)用設(shè)置排查,可以解決這類錯誤。


聯(lián)系我們
教程看不懂?聯(lián)系我們?yōu)槟赓M解答!免費助力個人,小企站點!
客服微信
客服微信
電話:020-2206-9892
QQ咨詢:1025174874
郵件:info@361sale.com
工作時間:周一至周五,9:30-18:30,節(jié)假日休息
? 轉(zhuǎn)載聲明
本文作者:linxiulian
THE END
喜歡就支持一下吧
點贊110 分享
評論 搶沙發(fā)

請登錄后發(fā)表評論

    暫無評論內(nèi)容