文档章节

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

lengspring
 lengspring
发布于 2013/04/03 17:07
字数 316
阅读 412
收藏 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
网站运维——Chrome 神奇的21秒

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

perofu
2016/11/14
100
0
nginx+fpm报499错误的解决方案

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

jiangwu
2016/01/27
304
0

没有更多内容

加载失败,请刷新页面

加载更多

MariaDB 服务器在 MySQL Workbench 备份数据的时候出错如何解决

服务器是运行在 MariaDB 10.2 上面的,在使用 MySQL Workbench 出现错误: mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"'......

honeymose
54分钟前
0
0
apache顶级项目(二) - B~C

apache顶级项目(二) - B~C https://www.apache.org/ Bahir Apache Bahir provides extensions to multiple distributed analytic platforms, extending their reach with a diversity of s......

晨猫
今天
4
0
day152-2018-11-19-英语流利阅读

“超级食物”竟然是营销噱头? Daniel 2018-11-19 1.今日导读 近几年来,超级食物 superfoods 开始逐渐走红。不难发现,越来越多的轻食餐厅也在不断推出以超级食物为主打食材的健康料理,像是...

飞鱼说编程
今天
10
0
SpringBoot源码:启动过程分析(二)

接着上篇继续分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 一样的,我们先把时序图贴上来,方便理解: 二.源码分析 回顾一下,前面我们分析到了下...

Jacktanger
昨天
3
0
Apache防盗链配置,Directory访问控制,FilesMatch进行访问控制

防盗链配置 通过限制referer来实现防盗链的功能 配置前,使用curl -e 指定referer [root@test-a test-webroot]# curl -e "http://www.test.com/1.html" -x127.0.0.1:80 "www.test.com/1.jpg......

野雪球
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部