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

nginx 解决400 bad request 的方法(转载)的更多相关文章

  1. nginx 解决400 bad request 的方法

    nginx的400错误比较难查找原因,因为此错误并不是每次都会出现的,另外,出现错误的时候,通常在浏览器和日志里看不到任何有关提示. 经长时间观察和大量试验查明,此乃request header过大所 ...

  2. Nginx解决错误413 Request Entity Too Large

    最近一个项目当中,要求上传图片,并且限制图片大小,虽然在laravel当中已经添加了相关的表单验证来阻止文件过大的上传,然而当提交表单时,还没轮到laravel处理,nginx就先报错了.当你仔细看报 ...

  3. Nginx报400 Bad Request

    本地遇到此问题,关闭浏览器,重新运行代码即可

  4. nginx过一段时间出现400 Bad Request 错误的解决方法

    tomcat整合nginx成功后,等访问一段时间后,会出现 Bad Request (Invalid Hostname)的错误, 因为是已经成功的配置,所以判定可能是哪里的限制设置有问题,最后在官方网 ...

  5. 网页出现400 Bad Request Request Header Or Cookie Too Large错误的解决方法

    在开发项目过程中,突然遇到400 Bad Request Request Header Or Cookie Too Large的报错,我也是第一次出现这样的错误,感觉还是挺新奇的. 分析下出现错误的原 ...

  6. Apache rewrite 出现 400 Bad Request 的解决方法

    <VirtualHost *:80 *:81>         ServerAdmin deng5765@163.com         DocumentRoot /active/www/ ...

  7. SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法

    最近angularjs post到后台 400一头雾水 没有任何错误. 最后发现好文,感谢作者 SpringMVC中出现" 400 Bad Request "错误(用@Respon ...

  8. Yii apache配置站点出现400 Bad Request 的解决方法

    <VirtualHost *:80> ServerName localhost ServerAlias localhost DocumentRoot "/www/frogCms/ ...

  9. 解决 Nginx 400 Bad Request 问题(WebSocket)

    400 Bad Request 是一种 HTTP 错误状态码.HTTP/1.1 对 400 Bad Request的定义主要是: 语义有误,当前请求无法被服务器理解 请求参数有误 丢包导致异常 Goo ...

随机推荐

  1. freemarker中使用shiro标签

    地址:https://github.com/jagregory/shiro-freemarker-tags下载该jar包 或者源代码文件复制到自己工程的lib下或者package中  如果使用spri ...

  2. linux入门学习1

    推荐 实验楼网站 在线的linux环境和课程学习 这是一些摘要和笔记 UNIX/Linux历史简介 操作系统始于二十世纪 50 年代,当时的操作系统能运行批处理程序.但是不能实现交互.交互式操作系统也 ...

  3. LaTex学习笔记

    常见符号大全:http://ia.wikipedia.org/wiki/Wikipedia:LaTeX_symbols 字体加粗: \textbf{} 换页:\newpage 大于等于,小于等于    ...

  4. java重写

    1.当子类重写父类方法时,修改方法的修饰权限只能从小的范围到大的范围改变,不能从大的范围向小的范围改变,public  protected  private,[权限篇] 2.子类重写父类方法还可以修改 ...

  5. 避免多层回调,Node.js异步库Async使用(parallel)

    原来写的一个分页查询,回调了好几层. exports.list = function(req,res) { var params = {}; var current_page = common_uti ...

  6. Esfog_UnityShader教程_漫反射DiffuseReflection

    这篇是系列教程的第三篇,最近工作比较紧,所以这个周六周日就自觉去加了刚回来就打开电脑补上这篇,这个系列的教程我会尽量至少保证一周写一篇的.如果大家看过我的上一篇教程<Esfog_UnitySha ...

  7. 一个构建XML对象的js库

    初学javascript,学习中用到在IE中建立XML对象,于是写了一个简单的“库”.因为水平所限,肯定会有不恰当的地方,欢迎指正. 如果大家有知道现存的更好的东西,非常希望大家能将它推荐给我. 代码 ...

  8. iOS  Emoji表情编码/解码

    之前做弹幕的时候 遇到的表情编码解码问题 表情编码一般是使用unicode编码 ,编码之后的格式 \ud83d\ude18\ud83d\ude18world\u4e16\u754chaha\ud83d ...

  9. oracle通过DBlink连接mysql(MariaDB)

    1.安装先装 mysql-connector-odbc(或 mariadb-connector-odbc )和unixODBChttps://downloads.mariadb.org/mariadb ...

  10. asp.net(c#)中如何在前端用js写条件查询,且不用调用存储过程

    前端页面(源): <dx:ASPxButton ID="ASPxButton_Select" runat="server" Text="查询&q ...