Django与SSL的问题

24 投票
3 回答
16181 浏览
提问于 2025-04-15 18:26

我打算通过信用卡销售产品,所以在我的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_sslmod_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>

文档链接:

撰写回答