Модификация фрагмента Django SSL Redirect, не работает должным образом - PullRequest
0 голосов
/ 13 февраля 2012

Я использую 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; 
}
}

1 Ответ

3 голосов
/ 14 февраля 2012

Просто сделайте это полностью с помощью nginx.Не нужно привлекать Джанго вообще:

server {
    listen 80;
    rewrite ^(.*) https://$host$1 permanent;
}

server {
    listen 443;
    # The rest of your original server config here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...