我有一个服务运行在谷歌云,基本上几台机器后面谷歌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转发的设置。有没有人让这种设置工作?
我不知道它会工作。 https背后的想法是它建立了浏览器(用户)和服务器之间的安全连接。我认为你应该把它发回客户端,告诉他们切换到不同的协议。 – Grzenio
是的,多数民众赞成我试图实现 - 使负载平衡器转发所有重定向到客户端,而不是将原始http请求转发到https端点。但我不知道该怎么做...... :) –
端口80和端口443上的客户端连接是ForwardingRules。负载均衡器会根据您配置BackendService的方式,在您的虚拟机上创建与Apache的连接。所以你的虚拟机只能看到80端口或443端口的流量;不是都。负载均衡层会将X-Forwarded-Proto设置为'http'或'https',您可以使用它发送301. 可能您有不同的设置,但HTH。 –