Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Google Cloud Run for Anthos(Knative)未在https请求上正确设置X-Forwarded-Proto标头_Python_Django_Docker_Google Cloud Platform_Google Cloud Run - Fatal编程技术网

Python Google Cloud Run for Anthos(Knative)未在https请求上正确设置X-Forwarded-Proto标头

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

我有一个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'])

返回的相关标题为:

"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重定向

官方云运行文档中解释了此过程:

  • 确保您的集群为1.17.7-gke.15及更新版本。在这些版本中,默认情况下启用“托管证书”功能

  • 为您的服务创建域映射。(您可以在云控制台上执行此操作)

  • 将域的DNS记录指向指定给您的IP地址(网关IP服务,可在
    gke system
    Kubernetes命名空间中找到)

  • TLS证书将在后台自动为您的域设置(并将每80天左右更新一次)

  • 设置HTTP→HTTPS重定向,要求您运行:

    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;
    
    我读了很多文档页面,但不知为什么我错过了那一页。谢谢我已经接受了另一个答案,因为它将解决这个问题,但谢谢你的建议。