繁体   English   中英

如何使用django-sslify在我的Django + nginx + gunicorn网络应用程序上强制https,并依赖Cloudflare的新免费SSL?

[英]How to use django-sslify to force https on my Django+nginx+gunicorn web app, and rely on Cloudflare's new free SSL?

介绍

Cloudflare现在免费提供SSL ,如果我不能在我的网站上利用这一点,那将是一个愚蠢的行为,并且在尝试过程中打破一切的彻头彻尾的傻瓜。

我可以很好地编写应用程序代码,但是当涉及到设置或配置https / nginx / gunicorn / etc / idon'tknowtheminminology时,我几乎无法遵循Googled说明。

我想使用django-sslify在我的Django网络应用程序上强制https。 考虑到以下已知事实,如何 在不破坏生活平衡的情况下 实现这一目标?

已知事实

  1. 我正在使用Django 1.7,在连接到(免费)Cloudflare DNS的DigitalOcean服务器上运行。 Django适合(服务?)与nginx和gunicorn。 基本上遵循本指南来完成所有设置。
  2. 访问我的网站目前默认为常规的http://example.com标题。
  3. 手动访问https://example.com使用绿色锁和所有,但这会中断所有表单提交错误“(403)CSRF验证失败。请求中止。”。
  4. 在我的Cloudflare网站设置中,域当前配置为“灵活SSL”。
  5. 尝试在我现有的设置中使用django-sslify完全打破了一切,浏览器无法返回响应。
  6. 这个信息块告诉我,当使用django-sslify和Cloudflare的SSL时,我应该使用“Full SSL”配置设置。
  7. 这里有犹豫的原因,提到需要20美元/月的Pro Cloudflare帐户来处理SSL终止。 所以我真的不想搞砸了:/
  8. 在我的nginx和gunicorn配置中,只有一个提到“http”或“https”,特别是在我的nginx配置中:

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-sslifydjango-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在你做了几次之后会变得更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM