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;
}
}