服务器中的错误记录类似于这种:
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都调大,可缓解此问题。
本文向大家介绍nginx服务器access日志中大量400 bad request错误的解决方法,包括了nginx服务器access日志中大量400 bad request错误的解决方法的使用技巧和注意事项,需要的朋友参考一下 在access.log中有大量400错误,并以每天几百M的速度增加,占用大量空间. 网上大把的文章说是HTTP头/Cookie过大引起的,可以修改nginx.conf中两参
请求执行错误。Endpoint=DefaultEndPoint{serviceURL='http://localhost:8761/eureka/}是在docker windows中运行时提供的,但在STS中运行spring boot app时,它是在eureka服务器上注册的。 对于我在docker中运行的服务器docker run-p 8761:8080 serverimagename对于我在
我们知道,使用“@IP:端口”或“@@IP:端口”的格式可以把日志发送到远程主机上,那么这么做有什么意义吗? 假设我需要管理几十台服务器,那么我每天的重要工作就是查看这些服务器的日志,可是每台服务器单独登录,并且查看日志非常烦琐,我可以把几十台服务器的日志集中到一台日志服务器上吗?这样我每天只要登录这台日志服务器,就可以查看所有服务器的日志,要方便得多。 如何实现日志服务器的功能呢?其实并不难,不
本文向大家介绍在Linux系统上查看Apache服务器的错误日志,包括了在Linux系统上查看Apache服务器的错误日志的使用技巧和注意事项,需要的朋友参考一下 错误日志和访问日志文件为系统管理员提供了有用的信息,比如,为 Web 服务器排障,保护系统不受各种各样的恶意活动侵犯,或者只是进行各种各样的分析以监控 HTTP 服务器。根据你 Web 服务器配置的不同,其错误/访问日志可能放在你系统中
本文向大家介绍nginx服务器中access_log日志分析与配置详解,包括了nginx服务器中access_log日志分析与配置详解的使用技巧和注意事项,需要的朋友参考一下 前言 nginx的log日志分为:access log 和 error log 其中access log 记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息 error log 则是记录服务器错误日志 log_fo