nginx414リクエスト-URIが大きすぎます
Nginx 414 Request Uri Too Large
問題:
nginx 414 Request-URI Too Large
#Clientリクエストヘッダーのバッファサイズ。リクエストヘッダーの全長が128k未満の場合は、このバッファを使用します。
#リクエストヘッダーの全長が128kを超える場合、large_client_header_buffersで設定されたキャッシュ領域
client_header_buffer_size 128k
#large_client_header_buffers命令パラメーター4は数値、128kはサイズ、デフォルトは8kです。 4128kを申請します。
large_client_header_buffers 4 128k
httpのURIが長すぎるか、リクエストヘッダーが大きすぎると、414リクエストURIが大きすぎるか、400不正なリクエストエラーが報告されます。
考えられる理由
シーン1.ヘッダー内の他のパラメーターのサイズは通常固定されているため、Cookieに書き込まれる値が大きすぎます。これは、Cookieのみがより大きなデータに書き込まれる可能性があるためです。
シナリオ2.記事の本文の公開、urlencodeの使用、getメソッドを使用したバックグラウンドへの受け渡しなど、リクエストパラメーターが長すぎます。
GET http://www.264.cn/ HTTP/1.1 Host: www.264.cn Connection: keep-alive Cache-Control: max-age=0 Accept: text/html,application/xhtml+xml,application/xmlq=0.9,*/*q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 Accept-Encoding: gzip,deflate,sdch Accept-Language: zh-CN,zhq=0.8 Accept-Charset: GBK,utf-8q=0.7,*q=0.3 Cookie: bdshare_firstime=1363517175366 If-Modified-Since: Mon, 13 May 2013 13:40:02 GMT
リクエストヘッダーが大きすぎる場合、large_client_header_bufferを超えると、nginxは「リクエストURIが大きすぎます」(414)または「不正なリクエスト」(400)エラーを返す場合があります。
上記のように、HTTPリクエストヘッダーは複数の行で構成されます。ここで、「GEThttp://www.264.cn/HTTP/1.1」はリクエスト行を意味します。
リクエスト行の長さがlarge_client_header_bufferのバッファ(128k)より大きい場合、nginxは上記のシナリオ2に対応して、「リクエストURIが大きすぎます」(414)エラーを返します。
リクエストの最長の行もlarge_client_header_bufferよりも小さくなっています。リクエスト行の最長の行がバッファ(128k)より大きい場合、上記のシナリオ1に対応して、「不正なリクエスト」(400)エラーが返されます。
解決
このとき、上記の2つの値を増やすことができます。少しのユーザーはnginxにこの設定オプションを持っていないかもしれません、あなた自身でそれを追加してください。
client_header_buffer_size 512k large_client_header_buffers 4 512k