私はNginxからこのエラーを受け取っていますが、理解できないようです!私はcodeigniterを使用しており、セッションにはデータベースを使用しています。だから、ヘッダーがどのように大きくなりすぎるのか疑問に思っています。とにかくヘッダーが何であるかを確認する方法はありますか?または潜在的に私はこのエラーを修正するために何ができるかを見る?
Confファイルなどを作成する必要がある場合はお知らせください。リクエストに応じて更新します
2012/12/15 11:51:39 [error] 2007#0: *5778 upstream sent too big header while reading response header from upstream, client: 24.63.77.149, server: jdobres.xxxx.com, request: "POST /main/login HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", Host: "jdobres.xxxxx.com", referrer: "http://jdobres.xxxx.com/"
[〜#〜] update [〜#〜]
Confに次を追加しました。
proxy_buffer_size 512k;
proxy_buffers 4 512k;
proxy_busy_buffers_size 512k;
そして今、私はまだ次のものを取得します:
2012/12/16 12:40:27 [error] 31235#0: *929 upstream sent too big header while reading response header from upstream, client: 24.63.77.149, server: jdobres.xxxx.com, request: "POST /main/login HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", Host: "jdobres.xxxx.com", referrer: "http://jdobres.xxxx.com/"
これを通常、/ etc/nginx/nginx.confにあるnginx.confファイルのhttp {}
に追加します:
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
次に、これをphpロケーションブロックに追加します。これは、vhostファイル内にあり、location〜.php $ {で始まるブロックを探します。
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
Nginx設定を変更し、次のディレクティブを変更/設定します。
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
Nginx + fcgiwrap構成を使用しているため、同じ問題が発生しました。
_location ~ ^.*\.cgi$ {
fastcgi_pass unix:/var/run/fcgiwrap.sock;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /opt/nginx/bugzilla/$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
# attachments can be huge
client_max_body_size 0;
client_body_in_file_only clean;
# this is where requests body are saved
client_body_temp_path /opt/nginx/bugzilla/data/request_body 1 2;
}
_
クライアントは約6000文字のURLでリクエストを行っていました(バグジラリクエスト)。
_location ~ ^.*\.cgi$ {
error_log /var/log/nginx/bugzilla.log debug;
# ...
}
_
これは私がログに記録したものです:
_2015/03/18 10:24:40 [debug] 4625#0: *2 upstream split a header line in FastCGI records
2015/03/18 10:24:40 [error] 4625#0: *2 upstream sent too big header while reading response header from upstream, client: 10....
_
はい、できます!私は読んでいた nginxリクエストに許可されたURLの長さを設定する方法(エラーコード:414、uriが大きすぎます) 前に「URLが長すぎる」と思っていたが、_502
414
_ではなく__です。
#1を試してください。
_# this goes in http or server block... so outside the location block
large_client_header_buffers 4 8k;
_
これは失敗し、私のURLは6000文字<8kです。 #2を試してください:
_large_client_header_buffers 4 4k;
_
これで_502 Bad Gateway
_は表示されなくなり、代わりに_414 Request-URI Too Large
_が表示されます
いくつかの研究を行い、インターネット上のどこかで発見しました:
これで十分でした:
_location ~ ^.*\.cgi$ {
# holds request bigger than 4k but < 8k
fastcgi_buffer_size 8k;
# getconf PAGESIZE is 4k for me...
fastcgi_buffers 16 4k;
# ...
}
_
無効なヘッダーが送信されたときにも送信されることを証明しました。無効な文字またはHTTPヘッダーのフォーマット、1か月以上前に設定されたCookieの有効期限などがすべて原因となります。
私は過去にこの問題に遭遇しました(codeigniterを使用していませんが、応答に大量のヘッダーデータが含まれている場合は常に発生します)。 。
私はこの特定のプロジェクトで使用していたspdyの障害であり、次のようなspdyヘッダー圧縮を有効にすることで解決したことが判明しました。
spdy_headers_comp 6;