使用301将http重定向到谷歌云负载均衡器后面的http(s)

时间:2015-11-04 12:20:04

标签: load-balancing google-compute-engine gcloud

我有一个在谷歌云中运行的服务,基本上谷歌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转发的任何设置。有没有人让这种设置工作?

1 个答案:

答案 0 :(得分:2)

好的,我会自己回答,也许有人后来发现这个有用。

目前,无法使用Google HTTP负载均衡向客户端转发301。负载均衡器将看到301,并将您的普通HTTP请求发送到301点的地址 - 这是相同的服务器,但是端口443.您的服务器需要HTTPS数据包但HTTP到达所以它失败。

目前正在为我们工作的解决方案 - 使用Haproxy或Nginx作为反向代理而不是Google HTTP Load Balancer。