zoukankan      html  css  js  c++  java
  • nginx 解决400 bad request 的方法(转载)

    nginx的400错误比较难查找原因,因为此错误并不是每次都会出现的,另外,出现错误的时候,通常在浏览器和日志里看不到任何有关提示。

    经长时间观察和大量试验查明,此乃request header过大所引起,request过大,通常是由于cookie中写入了较大的值所引起。

    所幸在nginx中是有办法解决这个问题:

    在nginx.conf中,将client_header_buffer_size和large_client_header_buffers都调大,可缓解此问题。

    其中主要配置是client_header_buffer_size这一项,默认是1k,所以header小于1k的话是不会出现问题的。

    按我现在配置是:

    client_header_buffer_size 16k;
    large_client_header_buffers 4 64k;

    这个配置可接收16k以下的header,在浏览器中cookie的字节数上限会非常大,所以实在是不好去使用那最大值。

    最好的解决办法当然是不要往cookie里写入太多的东西,不过如果是一个很大的网站,那么在一个二级域名写入了顶级域名下的cookie似乎是不好控制的,这需要制定一个规范来控制顶级域名的cookie写入量才可以解决得了。

    这个可能也是nginx的一个bug,因为buffer这个词义上说为缓冲,也就是说,如果没取完的话,是会循环取直至取完的,但是nginx并没有进行循环的动作直接返回了400错误。nginx的下一个版本可能会修正这个问题。

    ---

    最近发现16k的buffer居然还是不够用,改成128k了,变态一点对nginx来说也不是很大问题,重要是人不能因为这种事情搞疯了

    ---

    有朋友发现nginx在后台接收到很大的header时也会出现400错误,如:

    2008/08/02 22:51:14 [error] 16613#0: *105 upstream sent too big header while reading response header from upstream, client: 。。。。。。。。。。。。。

    在nginx的wiki里找了一遍,没有找到合适的语句,wiki更新过慢?于是查了一遍源码,在ngx_http_proxy_module.c也没有找到合适的语句。

    不过在nginx 0.3.12版的更新里有这么一句话:

    *) Change: the "proxy_header_buffer_size" and

       "fastcgi_header_buffer_size" directives was renamed to the

       "proxy_buffer_size" and "fastcgi_buffer_size" directives.

    不清楚作者改名用意何在,不过,proxy_buffer_size之前的名字proxy_header_buffer_size倒是有点合适,如果有朋友老遇到后台接收时抛出400错误,可以增大这个参数一试。

    原文地址:http://bbs.phpchina.com/forum.php?mod=viewthread&tid=207086

  • 相关阅读:
    eclipse 中文乱码
    为linux下ibus输入法添加搜狗词库
    汇编语言数据类型与声明
    linux下访问小米手机sd卡
    ubuntu linux下真机调试android程序
    Rhythmbox mp3音乐乱码的解决办法
    初学python线程(转)
    linux下安装安装BeautifulSoup
    django模板过滤器
    django使用静态文件
  • 原文地址:https://www.cnblogs.com/balala/p/5697902.html
Copyright © 2011-2022 走看看