Cloud Run http 到 https 重定向
Posted
技术标签:
【中文标题】Cloud Run http 到 https 重定向【英文标题】:Cloud Run http to https redirection 【发布时间】:2021-07-30 09:01:58 【问题描述】:在这个页面上它说
Cloud Run(全托管)将所有 HTTP 请求重定向到 HTTPS,但 在 TLS 到达您的 Web 服务之前终止它们。
terminates TLS before they reach the web service
我不太明白这是什么意思。 web服务是指容器中的web应用?
我部署云运行,使用无服务器 NEG 设置负载平衡器。
http://example.com
返回一个404
。https://example.com
返回一个200
。
重定向从什么时候开始?它不会自动重定向。
我只设法在应用程序级别重定向它。
云运行重定向如何工作?
【问题讨论】:
谷歌云前端 (GFE) 处理 HTTP -> HTTPS 重定向。从 GFE 到您的实例的通信通过 HTTP(默认为端口 8080)进行,因此您的服务不需要配置 SSL。 GFE 代理连接(客户端 GFE your_service)。 谢谢@JohnHanley 现在这很有意义! 顺便说一句,我发现在更改域时会出现轻微的延迟,其中 404 意外地为 http 流量呈现并且不重定向(并且该服务可通过 https 获得)。这在我不记得的一段时间后解决了,可能是一个小时。之后,当使用云运行作为默认功能集的一部分时,http 会根据需要重定向到 https。 【参考方案1】:Cloud Run 有自己的负载平衡器。所以,当你调用你的服务时,你有
Sender -----> Cloud Run LB -----> Container instance
如果您向 Cloud Run LB 发送 HTTP 请求,您将被重定向到 HTTPS。
在您的上下文中,您使用了一个附加层:外部 HTTPS 负载平衡器(也称为 GCLB),并且您拥有此链
Sender ------> GCLB -----> Cloud Run LB -----> Container instance
您在 HTTP 中收到 404,因为 GCLB 未配置为执行重定向。不仅如此,你的 GCLB 只监听 443 端口(前端配置),而你还没有打开 80 端口。
您可以关注this documentation 进行更新。最后,这不是 Cloud Run 问题,只是负载均衡器问题。
【讨论】:
感谢您让我们更容易理解!【参考方案2】:根据“使用 HTTPS 请求调用”的文档 [1];完全托管的 Cloud Run(CR) 将所有 HTTP 请求重定向到 HTTPS,但在 TLS 到达您的 Web 服务之前终止它。
如果您的服务生成的网络资源引用了具有不安全 URL (http://) 的其他网络资源,则您的页面可能会出现“混合内容警告或错误 [2]”。
我尝试使用快速入门:构建和部署 [3] 重现您的问题,但我无法重现,因为我的 URL 显示 HTTPS。
您的服务是否会生成引用其他具有不安全 URL 的 Web 资源的 Web 资源?
[1]https://cloud.google.com/run/docs/triggering/https-request
[2]https://web.dev/what-is-mixed-content/
[3]https://cloud.google.com/run/docs/quickstarts#build-and-deploy
【讨论】:
https 工作正常,但它不会将 http 重定向到 https。 您的网址正确吗?从 Cloud Console 或运行gcloud beta run services describe myservice2 | grep hostname
进行验证。以上是关于Cloud Run http 到 https 重定向的主要内容,如果未能解决你的问题,请参考以下文章
部署到 Google Cloud Run 时 Docker 容器无法启动
将 Cloud Armor 与 Cloud Run 结合使用并避免绕过
Cloud Run 完成,但 Cloud Scheduler 认为该作业已失败
Cloud Run 中的 API 和 VM 中的 Nginx 反向代理
Cloud Run 完全托管连接到 Cloud SQL:这是不是支持 SQL Server?
Google Cloud Run for Anthos(Knative)未在 https 请求上正确设置 X-Forwarded-Proto 标头