如何在AppEngine Flexible环境上强制Python 3 Django应用程序始终使用https?

时间:2019-02-22 18:05:25

标签: django python-3.x google-app-engine

将自定义域与Google生成的安全证书一起使用时,如何获得http请求以重定向到https?

我尝试在设置中将Django属性SECURE_SSL_REDIRECT设置为True,但这没有用。

编辑:是的,这个问题已经存在,但是该解决方案仅适用于Python2。

解决方案:就我的目的而言,解决方案只是从Appengine Flexible环境切换到Appengine Standard环境。我通过以下app.yaml解决了SSL问题。

runtime: python37
entrypoint: gunicorn -b :$PORT <django-project-name>.wsgi

handlers:
  - url: /.*
    secure: always
    redirect_http_response_code: 301
    script: auto

beta_settings:
  cloud_sql_instances: "<project-id>:<region>:<cloud-sql-instance>"

1 个答案:

答案 0 :(得分:2)

经过一番猜测和检查,我偶然发现了一个解决方案。

不要使用SECURE_SSL_REDIRECT Django设置。而是更新您的app.yaml以包括secure:always,同时还要确保已设置入口点,url设置为/.*和脚本设置为auto。

尽管Google文档明确声明已弃用处理程序部分,但在有无处理程序部分的情况下测试应用程序的部署表明,截至今天,GAE确实引用了app.yaml的处理程序部分。

编辑:发现这一点清楚地显示了Python 3.7 app.yaml中的处理程序-https://cloud.google.com/appengine/docs/standard/python3/config/appref#handlers_element

app.yaml

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT <projectid>.wsgi

handlers:
  - url: /.*
    secure: always
    script: auto

beta_settings:
    cloud_sql_instances: "<projectid>:<dbregion>:<dbinstance>"

runtime_config:
  python_version: 3

遇到更多问题后,尽管有文档说处理程序可以正常工作,但我还是切换到了Appengine Standard环境,它运行良好。

runtime: python37
entrypoint: gunicorn -b :$PORT <django-project-name>.wsgi

handlers:
  - url: /.*
    secure: always
    redirect_http_response_code: 301
    script: auto

beta_settings:
  cloud_sql_instances: "<project-id>:<region>:<cloud-sql-instance>"