Джанго и SSL вопрос - PullRequest
       25

Джанго и SSL вопрос

23 голосов
/ 25 января 2010

Я планирую продавать товары с помощью кредитных карт, поэтому использование SSL будет иметь решающее значение для сайта на платформе Django. И я очень наивен для этого.

Мой первоначальный план установки django состоял в том, чтобы использовать Apache в качестве веб-сервера и использовать mod_wsgi для связи с Django - статический носитель, снова обслуживаемый Apache. Все казалось хорошим, пока в планах не появится протокол SSL.

Я буду использовать протокол SSL для страниц конфигурации учетной записи пользователя, всей последовательности покупок и, возможно, у администратора django.

Я проверил официальную документацию и погуглил, но ответы довольно запутанные.

  • Каков рекомендуемый способ реализации SSL для этой настройки?
  • Есть какие-нибудь предложения для этого первого разработчика SSL на веб-сайте?
  • С этой страницы кажется, что они включили Nginx в стек. Разве это не может быть сделано без этого?

Спасибо

Ответы [ 3 ]

28 голосов
/ 25 января 2010

Я развернул приложения Django по SSL, используя Apache mod_ssl и mod_wsgi.

Я не эксперт 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>

Ссылки на документацию:

14 голосов
/ 09 ноября 2011

Для тех, кто приходит через 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;
    }

}
7 голосов
/ 25 января 2010

Django не работает с SSL. Apache позаботится об этом для вас прозрачно, и Django будет работать как обычно. Вы можете проверить SSL в представлении с помощью request.is_secure().

Однако, при необходимости, вы должны указывать ссылки в виде URL-адресов https. Вы также можете перенаправить определенные страницы http на страницы https (например, экран администратора django).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...