Django : https, nginx, uwsgi et is_secure()

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…

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 😉

Tchuss.

Aymeric DERBOIS

J'ai 27 ans et je suis développeur. Je travail la plupart du temps sur des techno web, mais pas que. Étant à l'affût des nouveautés, j'adore découvrir tout et n'importe quoi dans l'informatique. Je suis amoureux de CakePHP et j'utilise au quotidien Django. Je suis très ouvert d'esprit :). J'aime bien utiliser AngularJS aussi de temps à autre pour faire du front. Au quotidien j'utilise Fedora/Ubuntu pour le desktop et CentOS pour mes serveurs. Par ailleurs je maîtrise le C/C++/Python/PHP/...

More Posts - Website

Follow Me:
Twitter

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.