5

Centos 6 マシンに Nginx/Gunicorn/Django サーバーをデプロイし、SSL ポート (443) のみを外部に公開しています。したがって、サーバーが で呼び出されない限り、https://応答は得られません。で呼び出すと、http://domain:443単に 400 Bad Request メッセージが表示されます。ポート 443 は、サーバーにアクセスする唯一の方法です。

Nginx を使用して静的ファイル (CSS など) を提供しています。他のすべての要求は、Django を実行している Gunicorn によって処理されhttp://localhost:8000ます。したがって、管理サイト内のリンクと同様に、ナビゲートはhttps://domain.com正常に機能しますが、Django 管理でフォームを送信すると、リダイレクトで https が失われhttp://domain.com/、サーバーに到達できない request_uri に送信されます。それでも POST アクションは正しく機能し、データベースは更新されます。

私の設定ファイルは以下のとおりです。場所のlocation /セクションは、解決策が見つかるはずだと私が感じる場所です。proxy_set_header X-*しかし、ディレクティブが何の効果もないようです。モジュールか何かがありませんか?nginx/1.0.15 を実行しています。

インターネットで見つけたものはすべて、X-Forwarded-Protocol https何かをするべきだと指摘していますが、何も変わりません。リモートサーバーでデバッグを機能させることもできませんが、次のステップでは、さらに手がかりを得るためにデバッグを有効にしてローカルでコンパイルする必要があるかもしれません. 最後の手段は、ポート 80 を公開してすべてをリダイレクトすることですが、それにはいくつかの事務処理が必要です。

[http://pastebin.com/Rcg3p6vQ](私のnginx構成引数)

server {
    listen       443 ssl;

    ssl on;
    ssl_certificate /path/to/cert.crt;
    ssl_certificate_key /path/to/key.key;
    ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    server_name  example.com;

    root /home/gunicorn/project/app;
    access_log /home/gunicorn/logs/access.log;
    error_log /home/gunicorn/logs/error.log debug;

    location /static/ {
        autoindex on;
        root /home/gunicorn;
    }

    location / {
        proxy_pass http://localhost:8000/;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Protocol https; 
    }

}
4

1 に答える 1

2

これら2行が何をするのかを正確に理解する時間はまだありませんが、それらを削除すると問題が解決しました:

    proxy_redirect off;
    proxy_set_header Host $host;
于 2012-07-27T19:12:49.377 に答える