Django与SSL的问题
我打算通过信用卡销售产品,所以在我的Django网站上使用SSL是非常重要的。不过我对这些还很陌生。
我最初的计划是用Apache作为网络服务器,通过mod_wsgi和Django进行沟通,静态文件也由Apache来提供。一切看起来都不错,直到我想到要使用SSL协议。
我会在用户账户设置页面、整个购买流程,甚至可能在Django的管理后台使用SSL协议。
我查阅了官方文档,也在网上搜索过,但得到的答案让我有点困惑。
- 在这个设置中,实施SSL的推荐方法是什么?
- 对于第一次在网站上实施SSL的我,有什么建议吗?
- 从这个页面来看,他们似乎在架构中加入了Nginx。难道不可以不使用它吗?
谢谢!
3 个回答
8
Django本身不处理SSL的相关内容。这部分工作会由Apache来帮你自动完成,Django就可以像往常一样运行。你可以在视图中用 request.is_secure()
来检查是否使用了SSL。
不过,你需要在合适的地方使用https链接。此外,你可能还想把某些http页面(比如Django的管理界面)重定向到https页面。
14
对于通过谷歌来的朋友,这里有一个Nginx的配置示例:
server {
listen 443 ssl default;
server_name example.com;
ssl on;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
add_header Cache-Control "public, must-revalidate";
# add_header Cache-Control "no-cache";
expires 1d;
add_header Strict-Transport-Security "max-age=2592000; includeSubdomains";
location / {
fastcgi_pass localhost:8000;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_pass_request_headers on;
# include fastcgi_params;
}
location /static {
root /home/myapp/application;
}
location = /favicon.ico {
root /home/myapp/application/assets;
access_log off;
log_not_found off;
}
}
28
我在使用Apache的 mod_ssl
和 mod_wsgi
部署Django应用时,设置了SSL。
我对Apache不是特别精通,但我可以分享一下我为一个网站设置SSL的步骤(把下面的指令放到 httpd.conf
文件里,或者放到那个文件引用的其他文件里,比如在你的Apache安装中,如果有使用的话,可以放在 sites-enabled
目录里)。关于如何创建和使用自签名证书,可以查看下面的第一个文档链接。
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/certificatefile.crt
SSLCertificateKeyFile /etc/apache2/ssl/certificatekeyfile.crt
WSGIScriptAlias / /path/to/file.wsgi
</VirtualHost>
文档链接: