【问题标题】:How to redirect HTTP requests to HTTPS with GCP Load Balancer如何使用 GCP 负载均衡器将 HTTP 请求重定向到 HTTPS
【发布时间】:2017-04-18 09:25:51
【问题描述】:

我正在使用 L7 HTTP 负载均衡器。我想从 HTTP 请求重定向到 HTTPS。这是我的 nginx 配置的一部分。当我在没有负载均衡器的情况下访问我的 Web 服务器时,它可以工作。但它不适用于负载均衡器。返回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

【问题讨论】:

  • 你曾经解决过这个问题吗?如果是这样,请考虑发布一个自我回答,以便社区受益。

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


【解决方案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

【讨论】:

    猜你喜欢
    • 2016-09-13
    • 1970-01-01
    • 2017-10-21
    • 2015-03-18
    • 2020-02-04
    • 1970-01-01
    • 2017-02-20
    • 2018-06-07
    • 1970-01-01
    相关资源
    最近更新 更多