Cloudflare现在免费提供SSL ,如果不在我的网站上充分利用这个function,我会是一个傻瓜,在尝试的过程中,一个彻头彻尾的傻瓜可以打破一切。
我可以编写应用程序,但是在设置或configurationhttps / nginx / gunicorn / etc / id知道这个术语时,我只知道遵循Googlesearch的说明。
我想使用django-sslify在我的Djangonetworking应用上强制使用https。 鉴于以下已知事实,我怎样才能达到这一目标, 而不会破坏我生活的平衡 ?
location / {
proxy_pass http://127.0.0.1:8001; ... }
proxy_pass http://127.0.0.1:8001; ... }
另外,我的服务器正在为Phonegap应用程序提供一个Django Rest Framework API,是否需要考虑? 如果我需要提供附加信息,请告诉我,我会尽快回复您。 谢谢你看看这个! 🙂
CloudFlare允许你启用特定的页面规则 ,其中之一就是强制SSL(通过硬重定向 )。 除了 django-sslify
或django-secure
之外,这是一件好事
除了设置SSL重定向之外,还需要告诉Django处理安全请求。 幸运的是, Django为此提供了一个体面的指南 ,但是有一些事情没有提到,但是我必须用nginx来做。
在您的Django设置中,您需要告诉Django如何检测安全请求
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')
在你的nginx配置中,你需要设置X-Forwarded-Protocol
头(和X-Forwarded-For
/ X-Scheme
头也是有用的)。
proxy_set_header X-Scheme $scheme; proxy_set_header X-Forwarded-Protocol $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
您还需要代理Host
头,因此Django能够读取正确的主机和端口,用于生成绝对URL和CSRF等等。
proxy_set_header Host $http_host;
请注意,我使用$http_host
变量而不是$host
或$host:$server_port
。 这将确保Django仍然尊重CSRF对非标准端口的请求,同时仍然给你正确的绝对URL。
与大多数与nginx和gunicorn相关的东西,YMMV,它会变得更容易,你做了几次。