1. ホーム
  2. nginx

nginx 414 リクエスト URI が大きすぎます。

2022-02-22 11:15:05

取得元:http://www.cnblogs.com/kaituorensheng/p/5282878.html


症状

nginx 414 Request-URI Too Large

#クライアントリクエストヘッダバッファのサイズ。リクエストヘッダの合計が128kより大きいか小さい場合に使用される。

#リクエストヘッダの合計が128kを超える場合、large_client_header_buffersによって設定されるバッファ
client_header_buffer_size 128k です。

#large_client_header_buffers ディレクティブのパラメータ 4 は数字、128k はサイズ、デフォルトは 8k です。
large_client_header_buffers 4 128k;

414 Request URI too large または 400 bad request error http URI が長すぎるか、リクエストヘッダが大きすぎる場合、このエラーが発生します。


考えられる原因

シナリオ 1. クッキーに書き込まれた値が大きすぎる。ヘッダの他のパラメータのサイズは一般に固定されており、クッキーだけがより大きなデータで書き込まれる可能性があるため。

シナリオ2.リクエストパラメータが長すぎる。例えば、post bodyを投稿し、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/xml;q=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,zh;q=0.8
Accept-Charset: GBK,utf-8;q=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 は "Request URI too large" (414) または "Bad-request" (400) エラーを返す場合があります。

HTTPリクエストヘッダは、上記の例のように複数行からなり、"GET http://www.264.cn/ HTTP/1.1" はリクエスト行を表します。

Request 行が large_client_header_buffer (128k) の1バッファよりも長い場合、nginx は "Request URI too large" (414) エラーを返し、上記のシナリオ 2 に相当します。

リクエストキャストの最長行もlarge_client_header_bufferより小さい必要があり、リクエスト行でない最長行がバッファ(128k)より大きい場合、"Bad-request"(400)エラーを返し、上記のシナリオ1に相当します。


ソリューション

この場合、上記の2つの値を上げることができます。

client_header_buffer_size 512k;
large_client_header_buffers 4 512k;