网络推荐



本广告位招租!

推荐给好友 上一篇 | 下一篇

nginx频发400 bad request错误的原因和解决办法

nginx400错误比较难查找原因,因为此错误并不是每次都会出现的,另外,出现错误的时候,通常在浏览器和日志里看不到任何有关提示。
Z6@y"M i~0w
O!u grI{'m W经长时间观察和大量试验查明,此乃request header过大所引起,request过大,通常是由于cookie中写入了较大的值所引起。
+EJc w&fBSD爱好者乐园Un8N_'n{K}1b
所幸在nginx中是有办法解决这个问题:BSD爱好者乐园U!b(Q*Y];|QdM

2CHD7q%bz在nginx.conf中,将client_header_buffer_size和large_client_header_buffers都调大,可缓解此问题。BSD爱好者乐园4s'zE"Gn}#b|1M

7| ug1EV!Jm jd其中主要配置是client_header_buffer_size这一项,默认是1k,所以header小于1k的话是不会出现问题的。BSD爱好者乐园vE9Y&SW:`$C~$M

7B0~w9YP3]按我现在配置是:
_)~#V8ZJ(~
@5O'] y#Y-G+Z$sbclient_header_buffer_size 16k;
n v IW9glarge_client_header_buffers 4 64k;
1w-i7h~k8[KB\{H;zBSD爱好者乐园 A!JtDv(Svj)z7rF
这个配置可接收16k以下的header,在浏览器中cookie的字节数上限会非常大,所以实在是不好去使用那最大值。
~ f+M2vGw}%b| n#_BSD爱好者乐园&b'y-X g$l2K
最好的解决办法当然是不要往cookie里写入太多的东西,不过如果是一个很大的网站,那么在一个二级域名写入了顶级域名下的cookie似乎是不好控制的,这需要制定一个规范来控制顶级域名的cookie写入量才可以解决得了。
C:~#j["\1mv$j
9nZ:D(JhL这个可能也是nginx的一个bug,因为buffer这个词义上说为缓冲,也就是说,如果没取完的话,是会循环取直至取完的,但是nginx并没有进行循环的动作直接返回了400错误。nginx的下一个版本可能会修正这个问题。BSD爱好者乐园"g&O gt"J2YS Wcc

7a[p x"BP---BSD爱好者乐园bn!bw5[;p(u-gE

u$j|-j h`D~ Q'yo最近发现16k的buffer居然还是不够用,改成128k了,变态一点对nginx来说也不是很大问题,重要是人不能因为这种事情搞疯了BSD爱好者乐园'e0x;noi
BSD爱好者乐园$d4R UN:W
---BSD爱好者乐园Q]0Gkh;c
BSD爱好者乐园G)Bz7Y lw\'Z
有朋友发现nginx在后台接收到很大的header时也会出现400错误,如:
:amO7N0jX,[|sBSD爱好者乐园w'c"f a6r:| |;c R2a
2008/08/02 22:51:14 [error] 16613#0: *105 upstream sent too big header while reading response header from upstream, client: 。。。。。。。。。。。。。
BL.X(x%c+[4jbV/ZBSD爱好者乐园W6x TebKRW5x
在nginx的wiki里找了一遍,没有找到合适的语句,wiki更新过慢?于是查了一遍源码,在ngx_http_proxy_module.c也没有找到合适的语句。
k!K(z'ae$VdBSD爱好者乐园Y}#x*QU!p4zl,O
不过在nginx 0.3.12版的更新里有这么一句话:BSD爱好者乐园:o k]j^qu

"jaC6au#iL(\%A*) Change: the "proxy_header_buffer_size" andBSD爱好者乐园W6M_ch
   "fastcgi_header_buffer_size" directives was renamed to the
P-xy;W[Q7I   "proxy_buffer_size" and "fastcgi_buffer_size" directives.BSD爱好者乐园s0D Z,p Z$C,r

|rf A&X&KOw1P不清楚作者改名用意何在,不过,proxy_buffer_size之前的名字proxy_header_buffer_size倒是有点合适,如果有朋友老遇到后台接收时抛出400错误,可以增大这个参数一试。我就暂时先不验证真伪了,哪天兴起的时候再说吧。
[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
TAG: bad nginx 400 request
查看全部2条评论

最新评论

  • 删除 Guest (2010-4-29 09:06:45, 评分: -3 )

    -3
  • 删除 Guest (2009-12-23 15:34:47, 评分: 1 )

    1
 

评分:0

我来说两句

seccode