Django, https, nginx, uwsgi et is_secure()

11 novembre 2015
Aymeric

Pourtant je suis en HTTPS

Si vous utilisez wsgi avec nginx pour servir vos application Django, vous avez peut être rencontré ce problème : request.is_secure() return false, alors que votre site est bien en HTTPS...

Solution

La solution est très simple, dans votre fichier de conf Nginx ajoutez:

server {
    listen      443;
    server_name my_domain.io;

    ssl on;
    ssl_certificate     /etc/nginx/certificates/certif.crt;
    ssl_certificate_key /etc/nginx/certificates/certif.key;
    location / {
        [...]
        uwsgi_param HTTP_X_FORWARDED_PROTO $scheme;
        [...]
    }

}

Et dans votre fichier settings.py

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
$ sudo service nginx restart
$ sudo service uwsgi restart

Et voilà, is_secure devrait vous retourner True et request.scheme devrait vous retourner https ;)

Bonne journée !

Articles récents

Catégories

Tags