我在 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。