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 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错误,可以增大这个参数一试。

  • 相关阅读:
    Arrays常用方法
    一篇很好的java异常框架讲解
    python网络数据采集(低音曲)
    python网络数据采集(伴奏曲)
    记一次python的一些参数
    webshell 生成工具 b374k
    c/s与b/s 动态网站与静态网站 (网站编码统一“UTF-8”)
    RED_HAWK:基于PHP实现的信息收集与SQL注入漏洞扫描工具
    CVE-2017-8464复现 (远程快捷方式漏洞)
    cobaltstrike安装加破解教程+使用教程
  • 原文地址:https://www.cnblogs.com/nb-blog/p/5277255.html
Copyright © 2011-2022 走看看