nginx 414 Request-URI Too Large原因及解决方法

症状

页面提示414 Request-URI Too Large

可能原因

场景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。

解决办法


方法一

在nginx.conf里面把这两个缓存加大就行
client_header_buffer_size 512k;
large_client_header_buffers 4 512k;

修改配置文件后,需要reload或者重启nginx

解决办法(二)

前端改用post 请求传递参数

解决办法(三)

服务端修改接受参数行为

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注