Я использую Nginx в качестве веб-сервера с обратным прокси-сервером для сервера gunicorn django.
Я попытался использовать фрагмент SSLRedirect отсюда:
http://djangosnippets.org/snippets/85/
Поскольку этот фрагмент всегда возвращал бы false из is_secure()
с моей настройкой, что приводило к циклу перенаправления, мне пришлось внести некоторые изменения.
SSL работает, но когда я получаю доступ к http://domain.net/main
, он не перенаправляетдо https://domain.net/main
.Разве это не должно быть сделано?
Ниже описывается изменение, которое я сделал:
if 'HTTP_X_FORWARDED_PROTOCOL' in request.META:
return True
И в моем nginx conf (мне нужен только SSL, http не требуется):
server {
listen 8888;
server_name domain.net;
ssl on;
ssl_certificate /path/to/domain.pem;
ssl_certificate_key /path/to/domain.key;
# serve directly - analogous for static/staticfiles
location /media/ {
root /path/to/root;
}
location /static/ {
root /path/to/root;
}
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 10;
proxy_read_timeout 10;
proxy_pass http://127.0.0.1:8881/;
# note this line
proxy_set_header X-Forwarded-Protocol https;
}
}