Django + uWSGI + Nginx + SSL - request for working configuration (emphasis on SSL)

Aaron Lelevier picture Aaron Lelevier · Apr 23, 2015 · Viewed 15.7k times · Source

Does anyone have a working configuration for these four?

- Django
- uWSGI
- Nginx
- SSL 

The main question is how to correctly set up SSL for this? I've googled a lot, and still can't get it to work. I have a working set up for http with unix sockets, but that's as far as I could get.

There are some other answers posted, but they are mostly code snippets, and not a whole configuration.

Answer

Domen Blenkuš picture Domen Blenkuš · Apr 23, 2015
server {
    listen          80;
    server_name     example.com;
    rewrite ^/(.*)  https://example.com/$1 permanent;
}

server {
    listen          443 ssl;
    server_name     example.com;
    access_log      /var/log/nginx/example.com_access.log combined;
    error_log       /var/log/nginx/example.com_error.log error;

    ssl_certificate         /etc/nginx/ssl/example-unified.crt;
    ssl_certificate_key     /etc/nginx/ssl/example.key;

    location /static/ {
        alias /webapps/example/static/;
    }

    location /media/ {
        alias /webapps/example/media/;
    }

    location / {
        proxy_pass         http://localhost:8000/;
        proxy_redirect     off;

        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
    }

}

This is basic nginx configuration that will work with SSL and will forward requests to uwsgi running on port 8000 (you can change this to socket if you want).

For advanced SSL settings check THIS.