在 Django 中强制使用 https
Posted
技术标签:
【中文标题】在 Django 中强制使用 https【英文标题】:Forcing https in Django 【发布时间】:2012-08-01 20:21:31 【问题描述】:我正在尝试通过 SSL 加密我的整个网站。但是,我没有找到使用 Django 1.4 执行此操作的明确方法。有谁知道解决办法吗?
【问题讨论】:
【参考方案1】:在 apache+django (1.6) 上,这可以通过多种方式完成,但可以在 .htaccess 或 httpd.conf 文件中完成的一种简单方式是:
RewriteEngine On
RewriteCond %HTTPS off
RewriteRule (.*) https://%HTTP_HOST%REQUEST_URL
这里有一个链接以获取更多信息:
http://wiki.apache.org/httpd/RewriteHTTPToHTTPS
为确保会话和 csrf cookie 不会被客户端通过普通的 http 连接泄露,您应该确保它们被设置为“安全 cookie”并且仅由客户端通过 https 发送。这可以在您的 settings.py 文件中按如下方式完成:
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
django 安全性介绍,包括 SSL/HTTPS(必读):
https://docs.djangoproject.com/en/1.6/topics/security/
【讨论】:
【参考方案2】:您可以使用诸如 django-secure 中提供的中间件,或者您可以通过将所有 HTTP 请求重定向到 HTTPS 在 Apache/nginx/HAProxy 级别处理此问题。
【讨论】:
+1 不过,只需在服务器级别执行此操作。没有理由让 Django 参与这个过程。 如果您混合使用 HTTP 和 HTTPS,那么您很可能需要一个 Django 中间件,但如果一切都将是 HTTPS,那么您确实最好在服务器级别处理它。 不要有争议,但即便如此,我还是会说在服务器级别进行。例如,像大多数人一样,我的管理员仅通过 HTTPS 提供服务,但我网站的其余部分是 HTTP。在我的 nginx conf 中,我只是将任何请求通过 HTTP 重定向到位置 /admin/ 到 HTTPS。 Django 仍然没有参与,也不需要参与。 是的,我理解,但这两种方法都是合理的,即使通过 Django 是次优的。 如何在服务器级别实现它?以上是关于在 Django 中强制使用 https的主要内容,如果未能解决你的问题,请参考以下文章