从nginx访问日志中的400错误说起

2011年10月1日

评论发表评论

最近在整nginx+php+mysql的网站架设,发现nginx的access.log文件(也就是访问日志)中有大量的400错误,知道HTTP状态码的童鞋都知道这个状态码表示错误的客户端请求,换句话说是服务器无法理解客户端的请求。

服务器中的错误记录类似于这种:
127.0.0.1 - - [01/Oct/2011:11:51:04 +0800] "-" 400 0 "-" "-" "-"

踩点:

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

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

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

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

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

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

测试:

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

一句评论:

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

转载于:https://blog.51cto.com/aixuexi/1183791

从nginx访问日志中的400错误说起相关推荐

  1. 使用cat,awk和sort命令从nginx访问日志中统计user-agent类型

    业务场景描述如下: 我有一个Nginx的web服务器,需要从统计日志中统计有哪些类型的设备终端和浏览器访问了我的网站. 访问日志中的每条记录是这样的: 使用下面的命令得到user-agent所在的字段 ...

  2. NGINX访问日志和错误日志

    Logs are very useful to monitor activities of any application apart from providing you with valuable ...

  3. Nginx 访问日志增长暴增出现尖刀的详细分析

    前言:          Nginx日志里面Mobileweb_access.log增长特别大,一天上百兆,将近100W的访问记录,按照我们目前的规模,热点用户才500个左右,就算人人用手机app访问 ...

  4. Nginx访问日志、日志切割、静态文件不记录日志和过期时间

    2019独角兽企业重金招聘Python工程师标准>>> 11月27日任务 12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件不记录日志和过期时间 1 ...

  5. 6月8日任务(12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件)

    课程名称:12.10 Nginx访问日志 笔记内容: [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf 定义日志格式 combined_ ...

  6. 使用Nginx访问日志统计PV和UV

    一个网站当用户量增大时候,不可避免有统计pv和uv的需求. UV(Unique Visitor):独立访客,以cookie为依据区分不同访客,UV计算一天之内(00:00-24:00),访问网站的访客 ...

  7. Nginx访问日志分析

    1.首先说明Nginx日志存放在系统的哪个位置,可以使用下列命令: 找到*/nginx/logs/access.log这个关键路径,就是Nginx的访问日志的位置.(其中*代表你电脑nginx文件夹前 ...

  8. Nginx 访问日志配置

    目录 一.Nginx 访问日志介绍 二.语法及默认值 三.配置实战 1.修改配置文件 2.日志变量说明 3.真实日志分析 四.参考资料 正文 回到顶部 一.Nginx 访问日志介绍 Nginx 软件会 ...

  9. 使用awk,sort和uniq从ATS访问日志中统计出异常链接域名的次数排名

    在运维过程中,发现portal中出现流量异常曲线, 就从排查ATS的访问日志中的异常域名开始,下面是我截获的对应时段的访问日志截图 发现里面有502,403等异常响应,我们将这段访问日志文件记为exc ...

  10. nginx 访问日志分析工具 goacess

    2019独角兽企业重金招聘Python工程师标准>>> 20150702 nginx 访问日志分析 goacess 1.安装GoAccess需要一些系统支持库 yum install ...

最新文章

  1. 很高兴加入 英文_少和外国人说quot;You look youngquot;,她们可能会不高兴!
  2. (机器视觉)Halcon下颜色识别与联合C#编程
  3. mongodb 索引建立问题
  4. Java黑皮书课后题第6章:**6.22(数学:平方根的近似求法)实现Math类中dsqrt方法的技术:巴比伦法nextGuess = (lastGuess + n / lastGuess) / 2
  5. 论文总结(negFIN: An efficient algorithm for fast mining frequent itemsets)
  6. windows上的几个常用端口号
  7. iOS 11 UICollectionView顶部出现白色间隔的问题
  8. android 方法超时,android socket.io中的发出或确认超时处理?
  9. lnmp mysql 自动关闭_mysql总是自动停止 日志提示Plugin ‘FEDERATED’ is disabled的解决办法...
  10. 用我的亲身经历来告诉你如何自学Java?
  11. axure原型设计:手机版可视化图表
  12. video视频播放中trank标签字幕显示问题
  13. int temp java,temp是什么意思
  14. 总结:Prometheus Operator
  15. bne 1b什么意思
  16. 运动健身人群画像洞察报告.pdf
  17. java super是什么意思_java中Super到底是什么意思
  18. 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
  19. 运用php做程序,PHP编程在WAP开发中的运用
  20. 测试成绩软件,软件部分测试成绩_精英 Z87H3-A3X_主板评测-中关村在线

热门文章

  1. Layui layui-soul-able 组件 表格列进行拖拽
  2. Oracle bpm实现oa,谈谈BPM、工作流引擎与OA的关系
  3. WINDOWS上OpenCV需要有MediaPlayer才能正确运行?
  4. JAVA中两个数组比较可以使用Arrays.equals()
  5. 国产平台不能打印,对LINUX打印的一点疑问
  6. VS中编辑器显示行号
  7. 能跑的东西,尽量继续跑,平稳过渡
  8. VS找不到System.Web.Extensions.dll的解决办法
  9. apache2 wordpress目录权限_Linux下WordPress建站步骤
  10. python取非_Python:取非矩形区域的GLCM