Python Heroku上的Django SSL重定向:';重定向太多';
我在Heroku部署了一个web应用程序,该应用程序使用自定义域名,DNS通过CloudFlare进行管理 我想做的是将HTTP请求重定向到HTTPS 根据,将Python Heroku上的Django SSL重定向:';重定向太多';,python,django,heroku,https,Python,Django,Heroku,Https,我在Heroku部署了一个web应用程序,该应用程序使用自定义域名,DNS通过CloudFlare进行管理 我想做的是将HTTP请求重定向到HTTPS 根据,将SECURE\u SSL\u REDIRECT设置为True后,我在通过自定义域访问站点时遇到重定向次数过多的错误 这是我的settings.py文件中的内容: SECURE\u SSL\u REDIRECT=True 安全代理SSL头=('X-Forwarded-Proto','https') 请注意,此重定向适用于myapp.her
SECURE\u SSL\u REDIRECT
设置为True后,我在通过自定义域访问站点时遇到重定向次数过多的错误
这是我的settings.py
文件中的内容:
SECURE\u SSL\u REDIRECT=True
安全代理SSL头=('X-Forwarded-Proto','https')
请注意,此重定向适用于myapp.herokuapp.com
域
我在CloudFlare上使用DNS+代理,SECURE\u Proxy\u SSL\u头
是根据Heroku的设置的
这是Heroku日志:
2019-04-17T11:21:08.514202+00:00 heroku[路由器]:at=info method=GET path=“/”host=staging.mywebsite.com请求id=cf90ab0c-0895-4faf-aeea-5ee5fe5f970d-fwd=“115.87.132.194172.68.242.176”dyno=web.1 connect=0ms服务=2ms状态=301字节=228协议=http
需要注意的是:
如果将此设置为True
会导致无限重定向,则可能意味着您的站点运行在代理之后,无法区分哪些请求是安全的,哪些是不安全的。您的代理可能会设置一个标头来指示安全请求;您可以通过找出该头是什么并相应地配置SECURE\u PROXY\u SSL\u头
设置来纠正此问题
据我所知,“Cloudflare”是指它使用代理使您的网站更快。如果启用代理,与heroku相结合,将导致“太多重定向”
确保Cloudflare DNS中的云未设置为橙色,并且不会在服务器之前使用代理
您可以在heroku中设置SSL,请参见:
Django修改了头的格式,因此“X-Forwarded-Proto”变成了“HTTP\U-Forwarded\U-Proto”,因此在您的示例中,您应该将'X-Forwarded-Proto'
替换为'HTTP\U-Forwarded\U-Proto'
从:
请注意,标头需要采用request.META使用的格式–所有大写字母,可能以HTTP开头。(请记住,Django会在request.META中提供标头之前,自动将“HTTP_”添加到x标头名称的开头。)
还有一个例子就是这个确切的标题
设置一个包含两个元素的元组–要查找的头的名称和所需的值。例如:
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
这告诉Django信任来自我们代理的X-Forwarded-Proto头,只要它的值是“https”,那么请求就保证是安全的(即,它最初是通过https传入的)
在尝试了多种方法后,总是出现“太多重定向”错误,我决定从CloudFlare执行所有重定向,并将其从我的Django应用程序中删除
这是.是的,这就是我如上所述设置SECURE\u PROXY\u SSL\u头的原因。