12

私は、uwsgi+nginxの上にDjangoを使用するDotCloudでDjangoを使用しています。すべてのhttpトラフィックをhttpsにリダイレクトしようとしていますが、これによりリダイレクトループが発生します。次のhttp構成を使用しています

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

Djangoはhttpsで動作していることを理解しておらず、ヘッダーは保持されていないようです。https://url.com/http://url.com/accounts/login/にリダイレクト します。これにより、リダイレクトが何度も繰り返され、リダイレクトループが発生します。私は実際にはnginxの専門家ではなく、十分に理解していません。何が間違っているのでしょうか?

簡単に言うと、uswsgiとnginx上で実行されているdjangoでリダイレクトhttpをhttpsに実行するにはどうすればよいですか。

4

3 に答える 3

13

httpsを使用する必要があることをDjangoに認識させるには、もう少し必要でした。

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;
}
于 2013-02-15T10:59:06.160 に答える
7
server {
  listen  80;
  server_name  yourhttphost;
  rewrite ^ https://yourhttpshost$request_uri? permanent; #301 redirect
}
server {
  listen 443;
  server_name  yourhttpshost;
  ........
  the rest
  ........
}

nginx config で「if」を使用するのは非常に悪い考えです!

于 2011-10-08T10:24:27.040 に答える
3
if ( $scheme = "http" ) {
     rewrite ^/(.*)$   https://$host/ permanent;
}
于 2011-08-22T11:17:52.537 に答える