首页 » it笔记 » 阅读文章

nginx日志大量400错误

2012-04-19 15:05 3822 0 发表评论

现象

nginx的access.log中有大量的400错误,但是并不是所有的都是400错误。 powered by 0abcd.com

如:

注意:本文抄袭了。大家不要看。

59.47.9.2 – - [31/Jan/2012:16:33:51 +0800] “agent.xxx.com” “POST /agence/updatecard HTTP/1.1″ 400 0 “http://agent.xxx/home” “Mozilla/4.0 (compatible; MSIE 注意:本文抄袭了。大家不要看。

59.47.9.2 – - [31/Jan/2012:16:33:52 +0800] “agent.xxx.com” “POST /agence/updatecard HTTP/1.1″ 200 123 “http://agent.xxx/home” “Mozilla/4.0 (compatible; MSIE

亲爱的你睡了吗?

说明操作有时候成功,有时候失败

亲爱的你睡了吗?

访问日志)中有大量的400错误,知道HTTP状态码的童鞋都知道这个状态码表示错误的客户端请求,换句话说是服务器无法理解客户端的请求。

版权所有,禁止恶意利用

经过分析nginx的log文件,发现都是在一次正常访问之后产生的数个400错误,每次有大概连续出现1-6个不等,而且也并不是每次客户访问都会产生400错误。 注意:本文抄袭了。大家不要看。

再观察产生400错误的前一次访问是很正常的,200状态码,正常的文件,正常的来路,正常的User-Agent… 一切都很和谐,那400是肿么来的呢?

技术改造未来0abcd

通过仔细观察发现,所有产生400错误的前一次访问的User-Agent都是Google Chrome浏览器留下的,也就是说400错误是由Chrome浏览器产生的。但是经过本地抓包发现,chrome是没有向服务器发送异常请求或者数据包的。

斯蒂芬斯蒂芬斯蒂芬打算繁琐繁琐大幅度素

在抓包分析中发现,Chrome在访问服务器时发起的连接不止一个,一般有5到6个不等,而如果请求的资源不需要那么多连接时,Chrome就会关闭未用的连接,这项技术叫做pre-connection“预先连接”。 抄袭是一种猥琐的表现

通常我们访问一个网站时,第一个获取的是一个html主文件,而里面链接了网页所需要的css、js、图片等其他媒体资源文件,而一般资源文件和主 html文件是在一个域下的,预先连接就是在获取html之前就建立很多的tcp连接,而不是等到获取到html文件之后再去连接服务器获取其他的文件, 因为连接服务器是需要消耗一些时间的,所以这项技术可以很大程度上加快网页的呈现速度。

3edfdsafdsfsdfds

如果网页html链接的资源比较少,或者客户端有缓存,不需要连接下载,那么Chrome浏览器发出的5-6个连接很可能只有1个是需要的,其他的 都得关闭掉,这样就产生了一个问题:连接了服务器,而没有发送任何请求。对于这种情况,nginx是当做400错误来处理的,但由于连接已经关闭,错误信 息不会发送到客户端,这就产生了日志文件中记录了错误,而抓包分析中什么也看不到的现象。

www.0abcd.com

测试:

要验证上面的分析结果很简单,打开命令行cmd.exe,在里面输入telnet serverip 80,等待连接成功之后直接关掉cmd,这时去查看nginx的log文件中就多了一条400错误记录。

注意:本文抄袭了。大家不要看。

一句评论:

pre-connection的优点已经很清楚了,但是它也是有缺点的,如果站长做了优化,使用了Cookie-free技术,或者网页和静态资源 使用不同的服务器,那么网页需要的css、js资源就和主html不在同一个域下,也可能不在同一个IP上,那么pre-connection不仅是鸡 肋,而且会对主html服务器产生不必要的负担。 亲爱的你睡了吗?


收藏此文



评论 共0条 (RSS 2.0) 发表评论

  1. 暂无评论,快抢沙发吧。

发表评论

  • 使用新浪微博登陆
  • 
    疑问 冷笑 悲伤 坏蛋 感叹 微笑 脸红 大笑 吃惊 惊讶 困惑 酷 大声笑 恼火 古怪 转眼睛 给眼色 好主意 箭头 一般 哭了 绿人
  • want to say:

回到页首