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 !