Como redirecionar todo o tráfego HTTP para HTTPS para um aplicativo Django 1.4 em execução em um EC2 com nginx / uWSGI atrás de ELB com um certificado SSL

2

Eu gostaria de saber como colocar todo o meu site django atrás do HTTPS. Se alguém tentar vir via HTTP, quero que esse usuário seja redirecionado para HTTPS. Atualmente, o firefox está me dando o erro "O Firefox detectou que o servidor está redirecionando a solicitação para esse endereço de uma maneira que nunca será concluída".

Minha configuração é:

1.Um balanceador de carga (ELB) da AWS com certificado SSL.ificate O ELB tem dois ouvintes:

  • porta do balanceador de carga 80 (HTTP) apontando para a porta da instância 80 (HTTP)
  • porta do balanceador de carga 443 (HTTPS) apontando para a porta 80 (HTTP)

2.Uma instância do EC2 por trás do ELB executando nginx / uWSGI

configuração do 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;
             }
}

configuração do 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. O arquivo de configurações do Django possui as seguintes configurações específicas para SSL / HTTPS

SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

Alguma idéia de como configurar corretamente o HTTPS?

Obrigado

    
por Binary Maze 16.01.2013 / 07:49

2 respostas

1

  1. Configure seu mapeamento ELB da AWS ELB: 80 para instância: 80 e ELB: 443 para instância: 1443.
  2. Ligue o nginx para ouvir nas portas 80 e 1443.
  3. Encaminhar solicitações que chegam à porta 80 para a porta 443.

Configuração NGINX

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

server {
   listen         1443;
   server_name    www.example.org;
} 
    
por 16.01.2015 / 19:45
1

Acredito que a partir do Django 1.4 você pode apenas definir SECURE_SSL_REDIRECT = True no seu arquivo settings.py

    
por 14.04.2018 / 20:38