Django + uwsgi + nginx + SSL - PullRequest
       32

Django + uwsgi + nginx + SSL

12 голосов
/ 22 июля 2011

Я использую Django на DotCloud, который использует Django поверх uwsgi + nginx. Я пытаюсь перенаправить весь трафик http на https, что приводит к петле перенаправления. Я использую следующую конфигурацию http

if ($http_x_forwarded_port != 443) { rewrite ^ https://$http_host/; }

Кажется, что Django не понимает, что работает по протоколу https, и заголовок не сохраняется. Он перенаправляет https://url.com/ на http://url.com/accounts/login/, который перенаправляет снова и снова, что приводит к петле перенаправления. Я не очень разбираюсь в nginx и не очень хорошо это понимаю. Что я могу делать не так?

Вкратце, как мне запустить перенаправление http на https в django, запущенном поверх uswsgi и nginx.

Ответы [ 3 ]

12 голосов
/ 15 февраля 2013

Мне нужно было немного больше, чтобы Django знал, что он должен использовать https.

В settings.py я добавил SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

А в конфигурации nginx

location / {
    proxy_set_header X-Forwarded-Proto https;
    include uwsgi_params;
    uwsgi_param UWSGI_SCHEME https;
    uwsgi_pass_header X_FORWARDED_PROTO;
    uwsgi_pass unix:///path/to/socket;
}
6 голосов
/ 08 октября 2011
server {
  listen  80;
  server_name  yourhttphost;
  rewrite ^ https://yourhttpshost$request_uri? permanent; #301 redirect
}
server {
  listen 443;
  server_name  yourhttpshost;
  ........
  the rest
  ........
}

Использование "if" в конфигурации nginx - очень плохая идея!

3 голосов
/ 22 августа 2011
if ( $scheme = "http" ) {
     rewrite ^/(.*)$   https://$host/ permanent;
}
...