3

我有一個ec2實例,使用apache2作爲Web服務器正確安裝了我的網站文件。 ec2被配置爲只接收來自elb的端口80上的http流量(非常確定,但不是100%)。 elb有一個https監聽器(端口443)和一個http監聽器(端口80)。根據aws文檔解密數據後,elb將流量發送到ec2實例。我的問題是,我無法弄清楚如何將所有流量重定向到http到https的負載均衡器。Apache2不重定向到https

我試着在網站的虛擬主機和apache2.conf中使用這個重寫規則,但它沒有任何一種效果(也沒有錯誤)。

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} 

整個虛擬主機看起來像這樣(位於/etc/apache2/sites-available/SewaneeEats.conf):

ServerName classicloadbalancer-1929710381.us-east-1.elb.amazonaws.com 
ServerAdmin [email protected] 
DocumentRoot /var/www/html/SewaneeEats/public 

<Directory /var/www/html/SewaneeEats> 
    RewriteEngine On 
    RewriteCond %{HTTP:X-Forwarded-Proto} !https 
    RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} 
    AllowOverride All 
</Directory> 

ErrorLog ${APACHE_LOG_DIR}/error.log 
CustomLog ${APACHE_LOG_DIR}/access.log combined 

我也可以確認該模塊重寫已啓用。

所以當我輸入網址sewaneeeats.com(這些鏈接是活的,如果你需要檢查出來),它仍然是sewaneeeats.com(沒有任何ssl),而不是重定向。我知道ssl正在處理https://www.sewaneeeats.com。在https://sewaneeeats.com上,我在chrome的url欄中看到一個破損的ssl紅色符號。我認爲它在https://sewaneeeats.com網址上被破壞的原因是因爲該證書是爲www子域名註冊的,但我不確定。該域使用aws的路由53控制檯進行配置,因此如果它有幫助,我可以提供相關信息。

任何幫助將非常感激,因爲我一直試圖找出這約12小時左右。本來會在serverfault.com上發佈這個,但是我不能,因爲當我在10個代表下時,我只能有一個問題的2個鏈接。

+0

其中是sewaneeeats.com到www.sewaneeeats.com重定向在您的配置?至於SSL證書,我看到您使用的是由亞馬遜發行的證書,您可以將附加域名添加到證書中,只需添加sewaneeeats.com和www.sewaneeeats.com(您可能必須創建新證書) – at0mzk

+0

@ at0mzk重寫規則位於站點的虛擬主機配置文件中,即/etc/apache2/sites-available/SewaneeEats.conf文件。我將嘗試向證書添加其他域 – Daniel

+1

@ at0mzk我最終創建了一個新證書,該證書添加了所有子域以及裸域。感謝您的提示! – Daniel

回答

-1

我通常使用下面的規則將所有流量重定向到https:

RewriteCond %{HTTPS} =off 
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L] 

另外,如果你想全局應用規則的虛擬主機無需放置指令之間的重寫規則。

+0

謝謝你的幫助,但這沒有奏效。由於我使用的是彈性負載均衡器,負載均衡器應該在通過http接收請求時設置x-forward-proto頭。然後,在apache2 conf中,我應該能夠重寫請求(使用上述配置),但是這沒有任何影響 – Daniel