我有一个在谷歌云中运行的服务,基本上谷歌http(s)负载均衡器背后的几台机器。我设置了两个平衡规则,一个用于http://,另一个用于https://。我想要做的是将所有http://请求重定向到https://。每个节点都运行一个apache,所以我进行了如下配置:
<VirtualHost *:80>
ServerName my.app.com
Redirect permanent / https://my.app.com
</VirtualHost>
<VirtualHost *:443>
ServerName my.app.com
SSLEngine On
....
</VirtualHost>
如果有人访问普通的http,这应该使apache返回301。这工作正常,直到我移动到谷歌http负载均衡器后面,从那时起我得到400和:
错误请求
您的浏览器发送了此服务器无法理解的请求。 原因:您正在向支持SSL的服务器端口说明HTTP。 请使用HTTPS方案访问此URL。
my.app.com端口443上的Apache / 2.4.10(Debian)服务器
看起来谷歌负载均衡器消耗301并将普通的http请求重定向到https端点,而不是将301转发到客户端。我没有在Google负载均衡器设置中找到有关3XX转发的任何设置。有没有人让这种设置工作?
答案 0 :(得分:2)
好的,我会自己回答,也许有人后来发现这个有用。
目前,无法使用Google HTTP负载均衡向客户端转发301。负载均衡器将看到301,并将您的普通HTTP请求发送到301点的地址 - 这是相同的服务器,但是端口443.您的服务器需要HTTPS数据包但HTTP到达所以它失败。
目前正在为我们工作的解决方案 - 使用Haproxy或Nginx作为反向代理而不是Google HTTP Load Balancer。