Python Google Cloud Run for Anthos(Knative)未在https请求上正确设置X-Forwarded-Proto标头
我有一个django应用程序通过uwsgi提供的Docker在Google cloud run(Kube集群)中运行(但我尝试了manage.py runserver,结果是一样的)。默认情况下,cloud run接受http和https上的连接 我想将用户重定向到https版本,但cloud run没有正确设置标题 我有一个处理程序,它通过以下方式返回头文件:Python Google Cloud Run for Anthos(Knative)未在https请求上正确设置X-Forwarded-Proto标头,python,django,docker,google-cloud-platform,google-cloud-run,Python,Django,Docker,Google Cloud Platform,Google Cloud Run,我有一个django应用程序通过uwsgi提供的Docker在Google cloud run(Kube集群)中运行(但我尝试了manage.py runserver,结果是一样的)。默认情况下,cloud run接受http和https上的连接 我想将用户重定向到https版本,但cloud run没有正确设置标题 我有一个处理程序,它通过以下方式返回头文件:json.dumps(request.headers.\uu dict\uuu['''u store']) 返回的相关标题为: &quo
json.dumps(request.headers.\uu dict\uuu['''u store'])
返回的相关标题为:
"x-forwarded-proto": ["X-Forwarded-Proto", "http"]
但是,即使在我访问网站的https版本时,http的值也不会改变
django应该如何在云上正确检测http请求?我无法使用
安全\u代理\u SSL\u头
检测http请求并将其重定向到https,因为它们看起来都是http请求,所以最终进入重定向循环
但是,如果我遵循本文中的链接:
对于他们的“显示标题”链接,值确实从http更改为https。是django的事吗?还是“库贝云跑”的事
在纯云上运行有问题的应用程序并访问http版本时,会在内部重定向到HTTPS版本,并给出原因:非权威原因:HSTS
这正是我想要实现的。我得到的标题似乎来自内部路由,而不是在Anthos模式下运行时的原始请求本身。标题似乎是关于“云运行(完全管理)”,但您没有使用它。CloudRunforAnthos(Knative)有一个完全不同的堆栈来处理请求和HTTPS终止。所以请忽略这一点
下面介绍如何使用Knative管理的TLS证书(由Let's Encrypt颁发)创建一个域,并执行HTTP→ HTTPS重定向 官方云运行文档中解释了此过程:
gke system
Kubernetes命名空间中找到)
kubectl annotate domainmappings [YOUR_DOMAIN] domains.cloudrun.com/httpsRedirect=Enabled
这基本上是在Kubernetes中向DomainMapping对象添加注释
这将配置集群中的入口网关,以便为您执行重定向您无需阅读x-forwarded-proto
标题并采取行动
这个问题是众所周知的,几个月前我已经报告过了。你可以在谷歌云上为Anthos issue tracker追踪它 我发现了一个解决此问题的方法,即通过检查
window.location.protocol
的值是否为http
并重写位置,在前端使用JavaScript进行重定向:
window.location=“https://”+window.location.hostname+window.location.pathname+window.location.search;
我读了很多文档页面,但不知为什么我错过了那一页。谢谢我已经接受了另一个答案,因为它将解决这个问题,但谢谢你的建议。