nginx 414 Request-URI Too Large


症狀

nginx 414 Request-URI Too Large

#客戶端請求頭緩沖區大小,如果請求頭總長度大於小於128k,則使用此緩沖區,

#請求頭總長度大於128k時使用large_client_header_buffers設置的緩存區
client_header_buffer_size 128k;

#large_client_header_buffers 指令參數4為個數,128k為大小,默認是8k。申請4個128k。
large_client_header_buffers 4 128k;

當http 的URI太長或者request header過大時會報414 Request URI too large或400 bad request錯誤。

可能原因

場景1.cookie中寫入的值太大造成的,因為header中的其他參數的size一般比較固定,只有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/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 line

當Request line的長度大於large_client_header_buffer的一個buffer(128k)時,nginx會返回"Request URI too large" (414)錯誤,對應上面的場景2。

請求投中最長的一行也要小於large_client_header_buffer,當不是Request line的最長行大於一個buffer(128k)時,會返回"Bad-request"(400)錯誤,對應上面的場景1。

解決辦法

這時可以調大上述兩個值:

client_header_buffer_size 512k;
large_client_header_buffers 4 512k;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM