NginxをuWSGIアプリケーション(Djangoアプリ)のリバースプロキシとして設定しています。Djangoアプリがホストしているコンテンツの性質により、URLが長くなる場合があります。本当に長い。このため、Referer
HTTPヘッダーも長くなる場合があります。
ここに問題があります。Nginxは、Referer
1128バイトを超えると、クライアントから受信したものをドロップします(試行錯誤により発見)。1128バイト以下はすべてアップストリームサーバーに渡されます。より大きなものはすべてドロップされます。DjangoのCSRF保護メカニズムには無傷が必要なため、これは問題Referer
です。
ここに私のNginx設定の関連セクションがあります。ファイル:
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
Nginxのドキュメントを調べましたが、クライアントヘッダーの最大長を制御する設定が見つかりませんでした。イライラして、私はNginxのソースコードを注ぐことさえ始めました。
NginxをReferer
変更せずにアップストリームサーバーに渡すために何をする必要がありますか?
バージョン情報
- Ubuntu 14.04サーバー64ビット
- nginx / 1.4.6(Ubuntu)
- uWSGI 1.9.17.1-debian
- Django 1.7.0