Skip to content

ERR_TOO_MANY_REDIRECTS解決

  • by

ERR_TOO_MANY_REDIRECTS(過多重新導向)錯誤通常是由重新導向設定不當導致的,可能形成了無限迴圈。如果你使用的是 Nginx 伺服器加上 Cloudflare,可以依照以下步驟進行排查與修復:


1. 檢查 Cloudflare 的 SSL/TLS 設定

  • 問題來源:Cloudflare 的 SSL 模式與伺服器的 SSL 設定可能不一致。
  • 解決方法
    1. 登入 Cloudflare 後台。
    2. 進入 SSL/TLS 頁籤。
    3. 確認 SSL 模式是否正確:
      • Flexible:適用於伺服器未配置 SSL 的情況(不推薦,因為安全性較低)。
      • Full:伺服器有啟用 SSL,但不檢查憑證。
      • Full (Strict):伺服器有有效的 SSL 憑證。
    4. 如果使用 Flexible,請確保伺服器端 不要進行 HTTPS 重新導向,否則會造成迴圈。

2. 檢查 Nginx 設定檔

  • 問題來源:Nginx 的重新導向規則配置錯誤,可能導致無限迴圈。
  • 解決方法
    1. 開啟 Nginx 設定檔,通常位於 /etc/nginx/sites-available/yourdomain.conf
    • 避免不必要的重複導向規則。
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    #  HTTP 強制導向 HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name yourdomain.com www.yourdomain.com;

    # SSL 憑證設定
    ssl_certificate /path/to/ssl/certificate.crt;
    ssl_certificate_key /path/to/ssl/private.key;

    # 網站的主要設定
    root /var/www/html;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }
}

3. 檢查 HTTP_X_FORWARDED_PROTO 標頭

  • 問題來源:Cloudflare 使用代理標頭傳遞原始協議,但如果 Nginx 未正確辨識,可能導致重導迴圈。
  • 解決方法
    1. 確保 Nginx 處理 HTTP_X_FORWARDED_PROTO 標頭。
    在設定檔中添加以下內容:
set $forwarded_proto $http_x_forwarded_proto;

if ($forwarded_proto = "http") {
    return 301 https://$host$request_uri;
}

4. 清除 Cookies

  • 問題來源:損壞的 Cookies 可能會引發此錯誤。
  • 解決方法:清除瀏覽器中與該網域相關的 Cookies,然後重新載入網站。

5. 檢查 Cloudflare 的 Page Rules

  • 問題來源:Cloudflare 的 Page Rules 配置可能與伺服器重導規則衝突。
  • 解決方法
    1. 登入 Cloudflare 後台。
    2. 進入 Page Rules 頁籤。
    3. 檢查是否有規則導致 HTTPS 或其他重導產生衝突。

6. 清除快取

  • 問題來源:修復後,快取的錯誤導向可能仍然生效。
  • 解決方法
    1. 在 Cloudflare 後台進行 Purge Cache 操作。
    2. 清除瀏覽器快取。

7. 啟用 Cloudflare 的 “Development Mode”

  • 作用:暫時繞過 Cloudflare 的快取,直接測試伺服器設定。
  • 操作
    1. 在 Cloudflare 後台啟用 Development Mode
    2. 測試是否能正常運行。

8. 檢查日誌文件

  • 如果上述方法無法解決,查看 Nginx 的日誌來進一步排查:
    • 存取日誌:/var/log/nginx/access.log
    • 錯誤日誌:/var/log/nginx/error.log

範例完整設定檔

以下是一個適用於 Nginx 搭配 Cloudflare 的基本配置:

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    #  HTTP 強制導向 HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;

    # SSL 憑證配置
    ssl_certificate /etc/ssl/certs/cloudflare.crt;
    ssl_certificate_key /etc/ssl/private/cloudflare.key;

    # Cloudflare 專用設置
    set_real_ip_from 103.21.244.0/22;
    set_real_ip_from 103.22.200.0/22;
    set_real_ip_from 103.31.4.0/22;
    set_real_ip_from 104.16.0.0/13;
    set_real_ip_from 104.24.0.0/14;
    set_real_ip_from 108.162.192.0/18;
    set_real_ip_from 131.0.72.0/22;
    real_ip_header CF-Connecting-IP;

    location / {
        try_files $uri $uri/ =404;
    }
}

依照上述步驟逐一檢查與修改,相信可以解決 ERR_TOO_MANY_REDIRECTS 的問題。如果需要進一步協助,請隨時告訴我!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *