SSL con Nginx y Gunicorn + Django

Hace un par de meses, configuré un servidor para una empresa de Australia. Ellos tenían un requerimiento especial con el cual yo no contaba experiencia: Configurar NGIX con soporte para SSL en Django.

Como los lectores de este blog sabran, mi forma preferida de desplegar un proyecto Django en producción es usando supervisord, nginx y gunicorn, en este post nos vamos a centrar en la parte de configuración de nginx y gunicorn.

Para gunicorn, la configuración fue realmente simple:

    bind = "127.0.0.1:8002"
    logfile = "/route/webapps/djsites/fun/etc/log/gunicorn.log"
    workers = 2
    loglevel = 'debug'
    debug = True
    secure_scheme_headers = {'X-FORWARDED-PROTOCOL': 'https'}

Algo que espero que les llame la atención es el parámetro de configuración secure_schema_headers que es el encargado de hacer que nuestra app django se comporte correctamente con el protocolo a usar en los enlaces y la parte de nginx no necesita usar reescritura de urls.

La configuración de nginx es realmente simple:

server
{
    listen 80;
    server_name domain.com.au www.domain.com.au;
    rewrite ^(.*) https://domain.com.au$1 permanent;
}

server {
    listen   443; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default ipv6only=on; ## listen for ipv6

    root /var/www;
    index index.html index.htm;

    ssl on;
        ssl_certificate ssl/domain.com.au_combinated.crt;
        ssl_certificate_key ssl/domain.com.au.key;

    # Make site accessible from http://localhost/
    server_name domain.com.au www.domain.com.au;

    location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
                ### Most PHP, Python, Rails, Java App can use this header ###
                proxy_set_header X-Forwarded-Protocol https;
            proxy_redirect off;

            if (!-f $request_filename) {
                proxy_pass http://127.0.0.1:8002;
                break;
            }
        }

    location /static/ {
        alias /home/webapps/djsites/fun/src/static/;
    }

    location /media/ {
        alias /home/webapps/djsites/fun/src/media/;
    }

    location /doc/ {
        alias /usr/share/doc/;
        autoindex on;
        allow 127.0.0.1;
        deny all;
    }
}

Con esto, deben de tener nginx funcionando con su aplicación Django con SSL sin problemas

Pingbacks

Los pingbacks están cerrados.

Comentarios

Los comentarios están deshabilitados.