2012-08-03 70 views
1

我试图通过SSL加密我的整个站点。但是,我没有找到明确的方法来使用Django 1.4来做到这一点。有谁知道解决方案?在Django中强制https

回答

4

您可以使用中间件,例如django-secure中提供的中间件,或者您可以通过将所有HTTP请求重定向到HTTPS来处理Apache/Nginx/HAProxy级别的中间件。

+0

+1虽然,只是做它在服务器级别。 Django没有理由参与这个过程。 – 2012-08-03 19:09:55

+0

如果你有一个HTTP和HTTPS的混合,那么你很可能需要一个Django中间件,但如果一切都将是HTTPS,那么你最好在服务器级别处理这个。 – 2012-08-03 19:20:56

+0

不是有争议的,但即使如此,我还是会说在服务器级别做。例如,与大多数情况一样,我的管理员仅通过HTTPS提供服务,但我网站的其余部分是HTTP。在我的nginx conf中,我只需将任何请求重定向到位置/ admin /通过HTTP传输到HTTPS。 Django仍然没有参与,也不需要。 – 2012-08-03 19:34:47

2

在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饼干不是由客户端通过普通的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/