欢迎来到日本小春精选,了解日本先从@日本生活基础课程开始!
欢迎 欢迎     登录 | 注册      消息
当前位置: 首页小组技术交流nginx频发400 bad request错误的原因和解决办法

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

ginx的400错误比较难查找原因,因为此错误并不是每次都会出现的,另外,出现错误的时候,通常在浏览器和日志里看不到任何有关提示。<br /><br />经长时间观察和大量试验查明,此乃request header过大所引起,request过大,通常是由于cookie中写入了较大的值所引起。<br /><br />所幸在nginx中是有办法解决这个问题:<br /><br />在nginx.conf中,将client_header_buffer_size和large_client_header_buffers都调大,可缓解此问题。<br /><br />其中主要配置是client_header_buffer_size这一项,默认是1k,所以header小于1k的话是不会出现问题的。<br /><br />按我现在配置是:<br /><br />client_header_buffer_size 16k;<br />large_client_header_buffers 4 64k;<br /><br />这个配置可接收16k以下的header,在浏览器中cookie的字节数上限会非常大,所以实在是不好去使用那最大值。<br /><br />最好的解决办法当然是不要往cookie里写入太多的东西,不过如果是一个很大的网站,那么在一个二级域名写入了顶级域名下的cookie似乎是不好控制的,这需要制定一个规范来控制顶级域名的cookie写入量才可以解决得了。<br /><br />这个可能也是nginx的一个bug,因为buffer这个词义上说为缓冲,也就是说,如果没取完的话,是会循环取直至取完的,但是nginx并没有进行循环的动作直接返回了400错误。nginx的下一个版本可能会修正这个问题。<br /><br />---<br /><br />最近发现16k的buffer居然还是不够用,改成128k了,变态一点对nginx来说也不是很大问题,重要是人不能因为这种事情搞疯了<br /><br />---<br /><br />有朋友发现nginx在后台接收到很大的header时也会出现400错误,如:<br /><br />2008/08/02 22:51:14 [error] 16613#0: *105 upstream sent too big header while reading response header from upstream, client: 。。。。。。。。。。。。。<br /><br />在nginx的wiki里找了一遍,没有找到合适的语句,wiki更新过慢?于是查了一遍源码,在ngx_http_proxy_module.c也没有找到合适的语句。<br /><br />不过在nginx 0.3.12版的更新里有这么一句话:<br /><br />*) Change: the &quot;proxy_header_buffer_size&quot; and <br />&nbsp;&nbsp; &quot;fastcgi_header_buffer_size&quot; directives was renamed to the <br />&nbsp;&nbsp; &quot;proxy_buffer_size&quot; and &quot;fastcgi_buffer_size&quot; directives.<br /><br />不清楚作者改名用意何在,不过,proxy_buffer_size之前的名字proxy_header_buffer_size倒是有点合适,如果有朋友老遇到后台接收时抛出400错误,可以增大这个参数一试。我就暂时先不验证真伪了,哪天兴起的时候再说吧。<br />
2012-10-24 12:07:57 来自:球球
用户评论(0)
正序阅读
你的回应
登录 | 注册