Apache-2.2

使用 AWS 彈性負載均衡器強制 HTTPS

  • October 18, 2015

我需要在我的彈性負載均衡器上將所有傳入的 HTTP 流量重定向到 HTTPS。

我厭倦了使用 Apache mod_rewrite:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

利用負載均衡器添加的 X-Forwarded-Proto 標頭,此規則應指示使用者瀏覽器請求相同 URL 的 HTTPS 版本。

到目前為止它不起作用(沒有重定向發生)。

我究竟做錯了什麼?

有一個更好的方法嗎?

編輯:

這最終奏效了:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]

因此,我假設您將 ELB 設置為接受 HTTP/80 和 HTTPS/443 上的流量,但將所有埠轉發到 HTTP。

如果你想使用你的方法(這很聰明),你確定你得到的不是%{X-Forwarded-Proto}-HTTP:前綴對我來說看起來很奇怪。除此之外,這對我來說是正確的。

如果這是在虛擬主機或主伺服器配置中並且仍然無法正常工作,您可以添加

RewriteLog rewrite-log
RewriteLogLevel 3

然後查看文件rewrite-log以了解實際情況。這個文件可能非常冗長,從較低級別開始。無法從.htaccess文件啟動日誌記錄。

(我建議您在其上設置標誌,RewriteRule [R=301,L]這將導致伺服器發回 301 響應,這會告訴搜尋引擎考慮永久重定向,並相應地更新其連結。)

引用自:https://serverfault.com/questions/453374