Rew*_*ine 12 django uwsgi dotcloud
我在DotCloud上使用Django,它在uwsgi + nginx之上使用Django.我试图将所有http流量重定向到https,这导致重定向循环.我使用以下http配置
if ($http_x_forwarded_port != 443) { rewrite ^ https://$http_host/; }
Run Code Online (Sandbox Code Playgroud)
似乎Django不理解它在https上运行并且标头没有被保留.它将https://url.com/重定向 到http://url.com/accounts/login/,它会一次又一次地重定向,从而导致重定向循环.我不是nginx的专家,也不太了解它.我能做错什么?
简而言之,如何在运行在uswsgi和nginx之上的django中将http重定向到https.
小智 12
我还需要更多让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;
}
Run Code Online (Sandbox Code Playgroud)
server {
listen 80;
server_name yourhttphost;
rewrite ^ https://yourhttpshost$request_uri? permanent; #301 redirect
}
server {
listen 443;
server_name yourhttpshost;
........
the rest
........
}
Run Code Online (Sandbox Code Playgroud)
在nginx配置中使用"if"是一个非常糟糕的主意!