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

問題描述:nginx

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

如下狀況將致使負載均衡器和後端 Web 服務器之間出現無限重定向循環:後端

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

將返回錯誤 ERR_TOO_MANY_REDIRECTS,而且毫不支持請求。服務器

解決辦法:負載均衡

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

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

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

二、NGINX 服務器code

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

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

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

重啓網站並確認重定向起做用。

相關文章
相關標籤/搜索