文档章节

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

lengspring
 lengspring
发布于 2013/04/03 17:07
字数 316
阅读 400
收藏 0
点赞 0
评论 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
nginx启用HSTS以支持从http到https不通过服务端而自动跳转

最近对我的个人网站启用了Https,所以想设置http默认自动转https访问的功能,但又不想总让服务端做转发操作,那样浪费资源。那么有什么好的办法呢? 302跳转 通常将 HTTP 请求 302 跳转到 HT...

Tenderrain
06/06
0
0
Chrome 错误代码:ERR_UNSAFE_PORT

最近在用Nginx发布多个站点测试,使用了87、88端口, 88端口访问正常,87端口就怎么也访问不了, 点击更多,提示错误代码:ERRUNSAFEPORT 不安全的端口?尼玛就只靠端口就能解决不安装问题了...

jerry__sun
2015/08/07
0
0
Java Applet 问题汇总

浏览器兼容 这里讨论限于 IE, Firefox 和Chrome 主流浏览器。 之前有写过一篇 Chrome 设置使用已安装JRE的方式 汇总一下,就是 Firefox 和 Chrome 要能找到 java , 依赖于在[HKEY_LOCAL_MAC...

itwriter
2014/06/20
0
0
C#-JudgeSystem判题系统-客户端和多线程

运行环境: vs2013 框架: .net4.5 上次实验中已经实现了单线程下的socket的tcp服务器 由于使用浏览器并不能直观的显示socket之间的交互相应,所以这次实验我们先完成客户端部分的编程再进行服...

tmj
2015/08/19
0
0
nginx中http核心模块的配置指令2

internal:配置知道的location只能用于内部请求访问,如果外部请求访问到该location,则返回404错误 keepalive_disable none | browser ...:配置禁止指定的浏览器使用保持keep-alive连接,默...

rick009
2015/08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

istio 路由实例解析

根据链路追踪图如上: 资料:https://istio.io/docs/guides/bookinfo/ 流程解析: 1. 访问地址: http://IP:31380/productpage kubectl get svc --all-namespaces -o wide istio-system isti......

xiaomin0322
11分钟前
2
0
Centos7通过yum安装jdk8

先查看系统是否已有自带的jdk rpm -qa |grep java rpm -qa |grep jdk rpm -qa |grep gcj 如果没有输出信息,则说明系统没有安装。如果有输出信息,则执行下面的命令卸载 rpm -qa | grep jav...

iplusx
13分钟前
0
0
字体的动画

树不要皮必死无疑,人不要脸天下无敌。如果你此时正在被承受着不公平的待遇,不要伤心不要气馁,吃亏要趁早。 .menu ul li a { position:relative; color: #FFFFFF; text-decoration:...

Js_Mei
13分钟前
0
0
新手学习hadoop发行版本选择介绍

Hadoop对于从事互联网工作的朋友来说已经非常熟悉了,相信在我们身边有很多人正在转行从事hadoop开发的工作,理所当然也会有很多hadoop入门新手。Hadoop开发太过底层,技术难度远比我们想象的...

左手的倒影
14分钟前
0
0
iOS定时器循环引用问题解决

我们通常使用NSTimer或CADisplayLink会使用以下方式 //定义@property (nonatomic, strong)NSTimer *timer;//实现self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:p......

xiaobai1315
14分钟前
0
0
给wordpress程序提速

在上一节中,我们介绍了wordpress CMS主题提速,本节我们接着介绍wordpress主题提速:gravatar用户头像缓存和google字体去除。 gravatar头像受到全世界网络用户的喜爱,设置好gravatar头像后...

hero2019
17分钟前
0
0
DevExpress v18.1最新版帮助文档下载大全

DevExpress v18.1.4帮助文档下载列表大全来啦!包含.NET、VCL、HTML/JS系列所有帮助文档,提供CHM和PDF两个版本。除已停止更新的Silverlight、Windows 8外,其余均为最新版本。 文章底部扫描...

Miss_Hello_World
20分钟前
0
0
Unity Shader中各种空间及变换方法

前几天尝试写一个传送门的shader,发现自己对坐标之间的变换掌握的不够熟练,趁着这阵子想整理shader相关的知识点,先把各种空间及之间转换整理一下。 1 模型空间-世界空间-观察空间-裁剪空间...

爽歪歪ES
26分钟前
0
0

定义和应用 栈(stack)是一种特殊的线性表,其插入(也称入栈或压栈)和删除(也称出栈或弹栈)操作都在表的同一端进行。这一端被称为栈顶(top)另一端称为栈底端(bottom)。 我们生活中其实...

Frost729
27分钟前
0
0
数据分析挖掘学习干货:大数据处理技术的总结与分析

一 数据分析处理需求分类 1 事务型处理 在我们实际生活中,事务型数据处理需求非常常见,例如:淘宝网站交易系统、12306网站火车票交易系统、超市POS系统等都属于事务型数据处理系统。 这类系...

加米谷大数据
32分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部