Linux服务器nginx访问日志里出现大量http 400错误的请求分析
作者:mdxy-dxy 发布时间:2023-06-22 12:03:19
服务器中的错误记录类似于这种:
124.65.133.242 – – [27/Oct/2014:14:30:51 +0800] “-” 400 0 “-” “-”
124.65.133.242 – – [27/Oct/2014:14:31:45 +0800] “-” 400 0 “-” “-”
124.65.133.242 – – [27/Oct/2014:14:31:45 +0800] “-” 400 0 “-” “-”
124.65.133.242 – – [27/Oct/2014:14:31:45 +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服务器产生不必要的负担。
其它原因
网上很多人写过相关的文章,大多的人的原因是因为 header 的头部大小超了,引起响应 400 告诉是 bad request.但其实还有一种可能,就是象端口测试工具,只是检查端口是否是活的。像 LVS 之类什么的,也会引起这种问题,然后日志中会出现大量的 400 错误。
对于上述问题可以在nginx.conf中,将client_header_buffer_size和large_client_header_buffers都调大,可缓解此问题。
猜你喜欢
- 1、最近在搜索结果呈现方式上两个关键词经常出现:综合(整合)搜索、搜索建议。2、综合(整合)搜索,简单来说:现在google、baidu的搜
- 一 、VMware vSphere部署的前期规划要点1、vSphere的优点(略)2如何利用现在的设备架构虚拟化环境在虚拟化过程中,用户大多
- Discuz!7.0 的防灌水机制包括了安全验证模式、验证码和验证问答等多种验证方式,站长可以通过安全验证设置,有效地防止 * 和垃圾广告
- 无论是Samba服务还是NFS服务,都要把挂载信息写入到/etc/fstab中,这样远程共享资源就会自动随服务器开机而进行挂载。虽然这很方便
- 最近网络中有主机频繁断线,刚刚开始还比较正常,但是一段时间后就出现断线情况,有时很快恢复,但是有时要长达好几分钟啊,这样对工作影响太大了。最
- 又到月底了,年关将至,是许多站长朋友都在为GOOGLE公司汇出来的广告费奔走,目前国内支持西联汇款的只有中国邮政和中国农行两家公司,中国邮政
- 前言本文是主要是记录CentOS 6.7系统下安装JDK7的过程记录,下面话不多说,来一起看看吧。方法如下:1、上Oracle官方下载最新的
- V5SHOP CEO 讲述网店的三个核心盈利点v5shop的成新东来和大家一起探讨当前甚至今后10年内都非常热门的话题电子商务。其实对于电子
- QQ农场VS开心农场,“偷菜”是否影响你的学习,工作?你有什么样的感想?我们先看看QQ强大变现力。即QQ空间游戏的变现能力,也许又强大到很多
- docker使用1. docker ps 查看运行中的容器2. docker images 查看docker镜像3. docker rm i
- 1. FTP协议概述FTP是文件传输协议(File Transfer Protocol )的简称。FTP是TCP/IP的一种具体应用,它工作
- 两权分立的FTP工作模式,工作环境: ADSL---(219.154.214.150)NAT(10.41.221.2)-----PC(10.
- lighttpd(发音为lighty)是一套开放源代码的网页服务器,以BSD许可证发布。相较于其他的网页服务器,lighttpd仅需少量的存
- ■ 如何在您的程式使用 curses ?在您的 C 程式的档头将 <curses.h> include 进来.当您引进 curs
- 随着互联网的快速发展,网购,这个名词对于广大网民来说已经是再熟悉不过了。只要上网,必定穿梭在网上人家的大街小巷之中。可以说互联网上的B2B,
- Yahoo推出的新搜索引擎机器人叫YahooSlurp。YahooSlurp跟GoogleBot一样,顺着每个HREF链接找到网站。它不会抓
- 一、概述我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和
- CentOS 8 已经发布很长时间了,作为一直折腾Linux虚拟机的一员怎么少的了我。环境&准备工作系统:Win 10 pro 19
- 关于你的博客Google知道些什么?Google拥有些什么?搜索引擎对博客有一系列的信任评价衡量指标,Google比你认为的更了解你的博客。
- 鬼鬼我最先开始接触的是网上的免费建站系统,从最先的免费二级域名到现在的可以绑定域名5d6d,领地,鬼鬼我都使用,都后来买了主机,于是开 始自