使用雲負載時將http的請求轉發至https時報錯:“ERR_TOO_MANY_REDIRECTS”!
阿新 • • 發佈:2018-12-03
pro 主機 網站 環境部署 後端 prot enable ext 但我
問題描述:
新業務正式環境部署,使用雲負載(有http監聽也有https監聽)在我向我的 Web 服務器添加重定向邏輯後,我的網站停止工作,並且我收到錯誤 ERR_TOO_MANY_REDIRECTS。負載均衡器將卸載 SSL,並且後端僅偵聽單個 HTTP 端口。我想將通過負載均衡器在端口 80 上傳入我的 Web 服務器的所有流量重定向至 HTTPS 端口 443,但我不想將我的後端偵聽器更改為端口 443。我如何解決此問題?
以下情況將導致負載均衡器和後端 Web 服務器之間出現無限重定向循環:
- 用於將 HTTP 請求重定向至 HTTPS 的 Web 服務器上的重寫規則會強制實施請求以對負載均衡器上的 HTTPS 流量使用端口 443。
- 負載均衡器仍會將請求發送到端口 80 上的後端 Web 服務器。
- 後端 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 301https://$host$request_uri; } }
重啟網站並確認重定向起作用。
使用雲負載時將http的請求轉發至https時報錯:“ERR_TOO_MANY_REDIRECTS”!