在 Google Compute Engine 上使用 HTTP(S) 负载均衡器时将所有 HTTP 流量重定向到 HTTPS

在 Google Compute Engine 上使用 HTTP(S) 负载均衡器时将所有 HTTP 流量重定向到 HTTPS

我在 Google Compute Engine 上设置了 HTTP/HTTPS 负载平衡,并设置了 2 条全局转发规则(HTTP 和 HTTPS)。每条规则都指向一个使用 HTTP 协议的后端服务。

我希望所有请求都http://*发送至https://*

由于负载均衡器通过 HTTP 与后端服务对话,我认为我无法让后端服务上的 nginx 发回301

我已经在 google compute 上尝试了十几个小调整,最终 google compute 都返回了502

我确信之前有人已经设置过这个。任何正确的提示或指示都将不胜感激。

答案1

我们使用 HTTP / HTTPS 负载均衡器进行了类似的设置,并设法强制使用 HTTPS。无法直接从负载均衡器进行设置,但您可以从后端服务进行设置。Google Cloud 负载均衡器将使用值 http 或 https 设置 X-Forwarded-Proto http 标头。您可以在后端服务中检查此标头(在我们的例子中是 Varnish,但也可以在 Nginx 中完成),如果值为 http,则返回 301。

答案2

目前,您可以直接从 HTTP(S) 负载平衡执行此操作。Google Cloud 发布了重写和重定向支持(自 2020 年 4 月起)。

请参阅本文以了解如何设置:

https://cloud.google.com/load-balancing/docs/https/setting-up-traffic-management#console关于此功能的更多详细信息:

https://cloud.google.com/load-balancing/docs/features#routing_and_traffic_management

答案3

我今天遇到了这个问题,并使用 TCP 负载平衡解决了它。如果您不需要 HTTP/HTTPS 特定的负载平衡器选项,也许您可​​以使用 TCP 负载平衡器(无 SSL)来接收到端口 80 和 443 的流量。对于来自端口 80 的流量,您可以发回 301。

相关内容