Вопрос Django и SSL
Я планирую продавать продукты, заряжая кредитные карты, поэтому использование SSL будет иметь решающее значение для сайта, работающего на Django. И я очень наивна для этого.
В моем первоначальном плане настройки django использовался Apache в качестве веб-сервера и с помощью mod_wsgi для связи с Django, статический носитель, снова обслуживаемый Apache. Все казалось хорошим до тех пор, пока протокол SSL не придет к планам.
Я буду использовать протокол SSL для страниц конфигурации учетной записи пользователя, всю последовательность покупок и, возможно, администратор django.
Я проверил официальную документацию и поступил в Google, но ответы довольно запутанны.
- Каким будет рекомендуемый способ внедрения SSL для этой настройки?
- Любые предложения для этого первого разработчика SSL на веб-сайте?
- Из этой страницы кажется, что они включили Nginx в стек. Не может ли это быть без него?
Спасибо
Ответы
Ответ 1
Я развернул приложения 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>
Ссылки на документацию:
Ответ 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 будет работать как обычно. Вы можете проверить SSL в представлении с помощью request.is_secure()
.
Однако вы должны обслуживать ссылки, если это необходимо, в качестве https-адресов. Вы также можете перенаправить определенные http-страницы на https-страницы (например, экран администратора django).