Назад | Перейти на главную страницу

Как перенаправить весь HTTP-трафик на HTTPS для приложения Django 1.4, работающего на EC2, с nginx / uWSGI за ELB с сертификатом SSL

Я хотел бы знать, как разместить весь мой сайт django за HTTPS. Если кто-то попытается зайти через HTTP, я хочу, чтобы этот пользователь был перенаправлен на HTTPS. В настоящее время firefox выдает ошибку «Firefox обнаружил, что сервер перенаправляет запрос на этот адрес так, что никогда не будет завершен».

Моя установка:

1. один балансировщик нагрузки AWS (ELB) с сертификатом SSL. ELB имеет два слушателя:

2. один экземпляр EC2 за ELB с запущенным nginx / uWSGI

конфигурация nginx

server {

        listen 80;
        return 301 https://$host$request_uri;
}

server {

        listen 443 ssl;
        set $home /server/env.example.com;

        client_max_body_size 10m;
        keepalive_timeout 120;


        location / {

               uwsgi_pass uwsgi_main;
               include uwsgi_params;
               uwsgi_param SCRIPT_NAME "";
               uwsgi_param UWSGI_CHDIR $home/project;
               uwsgi_param UWSGI_SCRIPT wsgi;
               uwsgi_param UWSGI_PYHOME $home;
             }
}

конфигурация uwsgi

# file: /etc/init/uwsgi.conf
description "uWSGI starter"
start on (local-filesystems
and runlevel [2345])
stop on runlevel [016]
respawn
exec /usr/local/sbin/uwsgi \
--uid www-data \
--socket 127.0.0.1:5050 \
--master \
--logto /var/log/uwsgi_main.log \
--logdate \
--optimize 2 \
--processes 8 \
--harakiri 120 \
--vhost \
--no-site \
--post-buffering 262144

3.Файл настроек Django имеет следующие настройки, специфичные для SSL / HTTPS.

SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

Есть идеи, как правильно настроить HTTPS?

Спасибо

Я считаю, что начиная с Django 1.4 и далее вы можете просто установить SECURE_SSL_REDIRECT = True в вашем файле settings.py

  1. Настройте в AWS ELB сопоставление ELB: 80 с экземпляром: 80 и ELB: 443 с экземпляром: 1443.
  2. Привяжите nginx для прослушивания портов 80 и 1443.
  3. Перенаправляйте запросы, поступающие на порт 80, на порт 443.

Настройка NGINX

server {
   listen         80;
   server_name    www.example.org;
   rewrite        ^ https://$server_name$request_uri? permanent;
}

server {
   listen         1443;
   server_name    www.example.org;
}