文档章节

客户端浏览器Chrome过早断开连接导致Nginx报400错误的解决办法

lengspring
 lengspring
发布于 2013/04/03 17:07
字数 316
阅读 407
收藏 0

什么原因这个哥们已经说了http://my.oschina.net/greki/blog/84314现象如下:

访问access.log日志出现:

192.168.72.1 - - [04/Apr/2013:00:45:28 +0800] "-" 400 0 "-" "-"

错误error.log日志出现:

2013/04/04 00:45:28 [info] 9489#0: *7 client prematurely closed connection while reading client request line, client: 192.168.72.1, server: _

使用patch命令打如下补丁:

diff -ur nginx-0.7.65.orig/src/http/ngx_http_request.c nginx-0.7.65/src/http/ngx_http_request.c
--- nginx-0.7.65.orig/src/http/ngx_http_request.c       2010-02-02 00:06:25.000000000 +0900
+++ nginx-0.7.65/src/http/ngx_http_request.c    2010-02-16 17:12:09.000000000 +0900
@@ -1132,7 +1132,7 @@
         c->error = 1;
         c->log->action = "reading client request headers";
 
-        ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
+        ngx_http_close_request(r, NGX_HTTP_CLIENT_CLOSED_REQUEST_LINE);
         return NGX_ERROR;
     }
 
@@ -2846,7 +2846,9 @@
 
     log->action = "logging request";
 
-    ngx_http_log_request(r);
+    if ( rc != NGX_HTTP_CLIENT_CLOSED_REQUEST_LINE ) {
+        ngx_http_log_request(r);
+    }
 
     log->action = "closing request";
 
diff -ur nginx-0.7.65.orig/src/http/ngx_http_request.h nginx-0.7.65/src/http/ngx_http_request.h
--- nginx-0.7.65.orig/src/http/ngx_http_request.h       2010-02-02 00:54:02.000000000 +0900
+++ nginx-0.7.65/src/http/ngx_http_request.h    2010-02-16 13:25:33.000000000 +0900
@@ -112,6 +112,7 @@
  * own code to log such situation when a client has closed the connection
  * before we even try to send the HTTP header to it
  */
+#define NGX_HTTP_CLIENT_CLOSED_REQUEST_LINE     498
 #define NGX_HTTP_CLIENT_CLOSED_REQUEST     499

将以上patch代码保存为nginx-free-request-400-bad-request.patch并使用以下命令:

[root@nginx-server-study nginx-1.2.8]# patch -p1 < ../nginx-free-request-400-bad-request.patch

原文地址:http://limilic.com/entry/930zlf7u95d876yg 由于nginx版本问题我的patch作了修改,我测试的nginx版本是nginx-1.2.8为目前最新稳定版本

© 著作权归作者所有

共有 人打赏支持
lengspring
粉丝 2
博文 12
码字总数 2874
作品 0
深圳
架构师
nginx 400状态码排查

最近,发现主站nginx的log中有很多400的错误,每天有几千万条,故决定对产生400错误的原因进行排查。分析nginx log,发现这种无效的400请求,总是在一个正常访问之后产生,一般出现一个或者几...

leejia1989
2014/07/04
0
0
从 nginx 访问日志中的400错误说起

在研究 OSCHINA 也在遭受大量的无效请求 这个问题时找到的一篇文章,转载于此: 最近在整nginx+php+mysql的网站架设,发现nginx的access.log文件(也就是访问日志)中有大量的400错误,知道HTT...

红薯
2011/12/20
9.2K
9
nginx出现499错误码的原因以及proxy_ignore_client_abort配置

最近发现服务器上出现很多499的错误,出现499错误的原因是客户端关闭了连接,在我这篇文章:服务端在执行时中途关闭浏览器退出之后php还会继续执行吗?个人实践实验得到结果(http://www.040...

科技小能手
2017/11/05
0
0
nginx+fpm报499错误的解决方案

rfc2616中定义了400-417错误代码,418-499是自定义范畴。所以可以判断499是nginx自己定义的。 499这个状态码并不是http协议中定义的status code,而是nginx自己定义的一个状态码。 当客户端主...

jiangwu
2016/01/27
304
0
网站运维——Chrome 神奇的21秒

1、报障 ①、用户使用chrome进行访问(下载),需要等待一段时间,才会提示下载框,debug发现时间都花在Stalled,状态显示pending,无论是跳转还是直接访问,而且时间刚好又是神奇的21秒 ②、...

perofu
2016/11/14
100
0

没有更多内容

加载失败,请刷新页面

加载更多

中秋快乐!!!

HiBlock
54分钟前
1
0
Node安装教程

1、安装最新版的node 2、设置相关目录(以D盘为例) 分别建立目录:D:\node,D:\node\node-globa,D:\node\node-cache 命令行输入: // 设置npm国内镜像 npm config set registry https://re...

Mohan710
今天
3
0
中国发布域名系统基础软件 “红枫”

9月12日消息,域名工程中心(英文缩写 ZDNS)发布了宣称自主开发的域名系统基础软件 “红枫(Maple DNS)”。 9月12日消息,域名工程中心(英文缩写 ZDNS)发布了宣称自主开发的域名系统基础软...

问题终结者
今天
3
0
Shell编程(分发系统介绍、expect远程登录、expect远程执行命令、expect传递参数)

分发系统介绍expect 分发系统expect即分发脚本,是一种脚本语言;通过他可以实现传输,输入命令(上线代码) 应用场景:业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者...

蛋黄_Yolks
今天
4
0
Java Http请求工具类

public static String httpPost(String source, String params) {URL url = null;HttpURLConnection conn = null;OutputStream os = null;String ret = null;try {......

yuewawa
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部