CentOS 6マシンにNginx/Gunicorn/Djangoサーバーを展開しており、SSLポート(443)のみが外部から見えます。したがって、サーバがhttps://
で呼び出されない限り、何の応答も得られません。 http://domain:443
で呼び出すと、400 Bad Requestメッセージが表示されます。ポート443は、サーバーにヒットする唯一の方法です。Nginx/Django管理POST httpsのみ
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](My 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;
}
}