【发布时间】:2020-11-26 14:42:41
【问题描述】:
我有一个 django 应用程序在谷歌云中运行(在 Kube 集群中),通过 uwsgi 服务的 Docker(但我已经尝试过 manage.py runserver 并且它是相同的)。默认情况下,云运行接受 http 和 https 上的连接。
我想将用户重定向到 https 版本,但 cloud run 没有正确设置标头。
我有一个处理程序,它通过以下方式返回标头:json.dumps(request.headers.__dict__['_store'])
并且返回的相关标头是:
"x-forwarded-proto": ["X-Forwarded-Proto", "http"]
但即使我访问 https 版本的网站,http 的值也不会改变。
django 应该如何正确检测云上运行的 http 请求?我无法使用
SECURE_PROXY_SSL_HEADER
检测http请求并将其重定向到https,因为它们似乎都是http请求,因此您最终会陷入重定向循环。
但是,如果我点击这篇文章中的链接:https://www.jhanley.com/google-cloud-run-https-part-2/
到他们的“显示标题”链接,该值确实从 http 更改为 https。这是一个django的东西吗?还是“在 kube 上运行云”的东西?
在纯云上托管有问题的应用程序并访问 http 版本会内部重定向到 HTTPS 版本并给出原因:Non-Authoritative-Reason: HSTS
这正是我想要实现的目标。我得到的标头似乎来自内部路由,而不是在 Anthos 模式下运行时的原始请求本身。
【问题讨论】:
标签: python django docker google-cloud-platform google-cloud-run