1. 程式人生 > >使用雲負載時將http的請求轉發至https時報錯:“ERR_TOO_MANY_REDIRECTS”!

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

pro 主機 網站 環境部署 後端 prot enable ext 但我

問題描述:

新業務正式環境部署,使用雲負載(有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; } }

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

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