使用雲負載時將http的請求轉發至https時報錯:“ERR_TOO_MANY_REDIRECTS”!


問題描述:

        新業務正式環境部署,使用雲負載(有http監聽也有https監聽)在我向我的 Web 服務器添加重定向邏輯后,我的網站停止工作,並且我收到錯誤 ERR_TOO_MANY_REDIRECTS。負載均衡器將卸載 SSL,並且后端僅偵聽單個 HTTP 端口。我想將通過負載均衡器在端口 80 上傳入我的 Web 服務器的所有流量重定向至 HTTPS 端口 443,但我不想將我的后端偵聽器更改為端口 443。我如何解決此問題?

以下情況將導致負載均衡器和后端 Web 服務器之間出現無限重定向循環:

  1. 用於將 HTTP 請求重定向至 HTTPS 的 Web 服務器上的重寫規則會強制實施請求以對負載均衡器上的 HTTPS 流量使用端口 443。
  2. 負載均衡器仍會將請求發送到端口 80 上的后端 Web 服務器。
  3. 后端 Web 服務器將請求重定向至負載均衡器上的端口 443。

將返回錯誤 ERR_TOO_MANY_REDIRECTS,並且絕不支持請求。

解決辦法:

1、Apache 服務器:虛擬主機文件方法(推薦)

在配置文件的虛擬主機部分中包含重寫規則。例如,對於 Apache httpd server,編輯 /etc/httpd/conf/httpd.conf 文件;對於 Apache 2.4,編輯 /etc/apache2/sites-enabled/ 文件夾中的 .conf 文件。

<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
</VirtualHost>

2、NGINX 服務器

注意:適用於 nginx/1.10.3 (Ubuntu) 和 nginx/1.12.1。

修改以下示例重寫規則 (nginx.conf):

server {
    listen 80;
    server_name _;
    if ($http_x_forwarded_proto = 'http'){
    return 301 https://$host$request_uri;
    }
}

重啟網站並確認重定向起作用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM