【问题标题】:Django and SSL questionDjango 和 SSL 问题
【发布时间】:2010-01-25 10:56:07
【问题描述】:

我计划通过向信用卡收费来销售产品,因此使用 SSL 对于 Django 驱动的网站至关重要。而我对此很天真。

我最初的 django 设置计划是使用 Apache 作为网络服务器并使用 mod_wsgi 与 Django 进行通信,Django 再次由 Apache 提供静态媒体。在 SSL 协议出现之前,一切似乎都很好。

我将在用户帐户配置页面、整个购买顺序以及可能在 django 管理员中使用 SSL 协议。

我已经检查了官方文档并在谷歌上搜索过,但答案相当混乱。

  • 在此设置中实施 SSL 的推荐方法是什么?
  • 对第一次使用 SSL 的网站实施者有什么建议吗?
  • 来自this page,似乎他们已将 Nginx 包含到堆栈中。没有它就不能完成吗?

谢谢

【问题讨论】:

    标签: python django ssl


    【解决方案1】:

    我已经使用 Apache 的 mod_sslmod_wsgi 在 SSL 上部署了 Django 应用程序。

    我不是 Apache 专家,但这是我为一个站点设置 SSL 的方法(将下面的指令放在 httpd.conf 文件中,或从该文件引用的文件中,例如在 sites-enabled 目录中,如果那样的话在您的 Apache 安装中使用)。请参阅下面的第一个文档链接,了解如何创建和使用自签名证书。

    NameVirtualHost *:443
    <VirtualHost *:443>
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/certificatefile.crt
        SSLCertificateKeyFile /etc/apache2/ssl/certificatekeyfile.crt
    
        WSGIScriptAlias / /path/to/file.wsgi
    </VirtualHost>
    

    文档链接:

    【讨论】:

    • 如果我只想通过 https 访问 django /admin/ url?我必须在您的配置示例中添加什么?
    • 我想最简单的方法是使用相同的 WSGIScriptAlias 指令配置 http 和 https 站点。在 https 站点配置中使用 Redirect /admin
    【解决方案2】:

    对于那些通过 Google 来的人,这里有一个 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;
        }
    
    }
    

    【讨论】:

      【解决方案3】:

      Django 不处理 SSL 的东西。 Apache 将透明地为您处理这些,而 Django 将照常工作。您可以使用request.is_secure() 在视图中检查 SSL。

      但是,您必须在适当的地方提供链接作为 https 网址。您可能还希望将某些 http 页面重定向到 https 页面(如 django 管理屏幕)。

      【讨论】:

        猜你喜欢
        • 2012-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-15
        • 2020-06-26
        • 2011-10-24
        相关资源
        最近更新 更多