2015-11-04 81 views
1

我有一個服務運行在谷歌雲,基本上幾臺機器後面谷歌http(s)負載平衡器。我設置了兩個平衡規則,一個用於http://和一個用於https://。我想要做的是將所有http://請求重定向到https://。有每個節點上運行Apache,所以我進行配置,如:使用301重定向http後面的谷歌雲負載平衡器

<VirtualHost *:80> 
    ServerName my.app.com 

    Redirect permanent/https://my.app.com 
</VirtualHost> 


<VirtualHost *:443> 
    ServerName my.app.com 
    SSLEngine On 
    .... 
</VirtualHost> 

這應該讓Apache在有人的情況下,返回301訪問純HTTP。這工作得很好,直到我在谷歌的HTTP負載平衡器後面的移動從那時起,我得到400:

壞請求

您的瀏覽器發送的請求,該服務器無法理解。 原因:您正在向使用SSL的服務器端口說純HTTP。 請使用HTTPS方案訪問此URL。

阿帕奇/ 2.4.10(Debian的)在my.app.com服務器端口443

它看起來像谷歌負載平衡器消耗301,取而代之的是簡單的HTTP請求到https端點重定向轉發301的給客戶。我還沒有發現任何關於谷歌負載均衡器設置中3XX轉發的設置。有沒有人讓這種設置工作?

+0

我不知道它會工作。 https背後的想法是它建立了瀏覽器(用戶)和服務器之間的安全連接。我認爲你應該把它發回客戶端,告訴他們切換到不同的協議。 – Grzenio

+0

是的,多數民衆贊成我試圖實現 - 使負載平衡器轉發所有重定向到客戶端,而不是將原始http請求轉發到https端點。但我不知道該怎麼做...... :) –

+1

端口80和端口443上的客戶端連接是ForwardingRules。負載均衡器會根據您配置BackendService的方式,在您的虛擬機上創建與Apache的連接。所以你的虛擬機只能看到80端口或443端口的流量;不是都。負載均衡層會將X-Forwarded-Proto設置爲'http'或'https',您可以使用它發送301. 可能您有不同的設置,但HTH。 –

回答

2

好的,我會回答自己,也許有人覺得這有用。

目前無法使用谷歌HTTP負載均衡向客戶端轉發301。負載平衡器將看到301,並將您的純HTTP請求發送到301點的地址 - 這是同一臺服務器,但端口443.您的服務器預計HTTPS數據包,但HTTP到達,因此它失敗。

目前正在爲我們工作的解決方案 - 使用Haproxy或Nginx作爲反向代理,而不是Google HTTP負載平衡器。

相關問題