mer*_*1er 2 python django https heroku
我有一个使用自定义域名部署到Heroku的Web应用程序,该域名通过CloudFlare管理。
我要做的是将HTTP请求重定向到HTTPS。
SECURE_SSL_REDIRECT根据Django的文档,设置为True后,在通过自定义域访问网站时遇到了Too many redirects(或site redirected you too many times)错误。
这是我的settings.py档案中的内容:
SECURE_SSL_REDIRECT = True
SECURE_PROXY_SSL_HEADER = ('X-Forwarded-Proto', 'https')
Run Code Online (Sandbox Code Playgroud)
请注意,此重定向适用于myapp.herokuapp.com域。
我在CloudFlare上使用DNS +代理,并且SECURE_PROXY_SSL_HEADER根据Heroku的文档进行设置。
这是Heroku日志:
2019-04-17T11:21:08.514202+00:00 heroku[router]: at=info method=GET path="/" host=staging.mywebsite.com request_id=cf90ab0c-0895-4faf-aeea-5ee5fe5f970d fwd="115.87.132.194,172.68.242.176" dyno=web.1 connect=0ms service=2ms status=301 bytes=228 protocol=http
Run Code Online (Sandbox Code Playgroud)
小智 8
Django 修改了标头的格式,所以“X-Forwarded-Proto”变成了“HTTP_X_FORWARDED_PROTO”,所以你应该在你的例子中替换'X-Forwarded-Proto'为'HTTP_X_FORWARDED_PROTO'。
请注意,标头需要采用 request.META 使用的格式 - 全部大写,并且可能以 HTTP_ 开头。(请记住,Django 会自动将 'HTTP_' 添加到 x-header 名称的开头,然后才能在 request.META 中提供标头。)
这个确切的标题还有一个例子。
设置一个包含两个元素的元组——要查找的标题的名称和所需的值。例如:
Run Code Online (Sandbox Code Playgroud)SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')这告诉 Django 信任来自我们代理的 X-Forwarded-Proto 标头,并且只要它的值为“https”,就保证请求是安全的(即,它最初是通过 HTTPS 传入的)。
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |