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