2015-11-04 79 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负载平衡器。

相关问题