如何使用GCP Load Balancer将HTTP请求重定向到HTTPS

时间:2016-12-03 15:56:01

标签: nginx load-balancing google-cloud-platform google-compute-engine

我正在使用L7 HTTP负载均衡器。我想从HTTP请求重定向到HTTPS。这是我的nginx配置的一部分。它在我没有Load Balancer的情况下访问我的Web服务器时有效。但它不适用于Load Balancer。返回404错误。

我该如何解决?

我正在使用nginx

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    ...
}

HTTP响应

HTTP/1.1 404 Not Found
Server: Google Frontend

我在下面发现了这个问题,并添加了$ http_x_forwarded_proto检查。但结果没有改变。

问题255:使用HTTP(S)负载均衡器时,将所有HTTP流量重定向到HTTPS https://code.google.com/p/google-compute-engine/issues/detail?id=255&thanks=255&ts=1446612833

server {
    listen 80;
    server_name example.com;
    if ($http_x_forwarded_proto = "http") { 
       return 301 https://$host$request_uri; 
    }
}

server {
    listen 443 ssl;
    ...
}

更新1

我发现我的负载均衡器只有HTTPS协议端点配置。我想我需要HTTP端口端点设置。

以下这篇文章会有所帮助。

GCE Load Balancer HTTPS and HTTP IP

1 个答案:

答案 0 :(得分:1)

由于负载均衡器仅在443上发送流量,因此从不使用80的服务器块。换句话说:负载均衡器的所有传入连接,在端口80和443上,并且在后端仅通过443发送,即使它们不是HTTPS连接。

解决方案是重定向到HTTPS,同时在整个后端保持SSL安全性。在负载均衡器的前端,打开端口80和443,在后端通过HTTPS发送它。然后将X_Forwarded_Proto条件放入SSL服务器块中。

server {
    listen 443 ssl;
    ...
    if ($http_x_forwarded_proto = "http") { 
        return 301 https://$host$request_uri; 
    }
    ...
}

编辑:同样检查一下。 Google正在跟踪此功能请求。 https://issuetracker.google.com/issues/35904733