我在 AWS 上运行了这个 nginx 服务器,它一直运行正常,直到最近有几个用户开始抱怨,他们尝试访问网站 10 次之后网站才打开。
我从来没能从我这边重现这个问题。我使用的是谷歌的 DNS 即 8.8.8.8,当我为其中一个用户更改 DNS 时,网站运行正常。这可能是原因,也可能只是巧合。
我在错误日志中发现了这一点-
2014/05/29 13:46:15 [info] 6940#0: *150649 client timed out (110: Connection timed out) while waiting for request, client: xx.xxx.xxx.xx, server: 0.0.0.0:80
2014/05/29 13:46:20 [info] 6940#0: *150670 client closed connection while waiting for request, client: xx.xxx.xxx.xx, server: 0.0.0.0:80
2014/05/29 13:46:20 [info] 6940#0: *150653 client closed connection while waiting for request, client: xx.xxx.xxx.xx, server: 0.0.0.0:80
2014/05/29 13:46:20 [info] 6940#0: *150652 client closed connection while waiting for request, client: xx.xxx.xxx.xx, server: 0.0.0.0:80
有些地方甚至这样——
2014/05/29 13:46:53 [info] 6940#0: *150665 client closed connection while waiting for request, client: xx.xxx.xxx.xx, server: 0.0.0.0:80
2014/05/29 13:46:53 [info] 6940#0: *150660 client xx.xxx.xxx.xx closed keepalive connection
注意-客户端 IP 地址为 xx.xxx.xxx.xx
这是 nginx 配置 -
server {
listen 80;
server_name somedomain.com www.somedomain.com;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
root /var/www/somedomain/current/app/webroot;
index index.php index.html index.htm;
... couple of location rules ...
}
我将非常感激您的帮助。
谢谢
答案1
根据您提供的 Nginx 日志,您的服务器与用户之间的连接似乎不稳定或速度很慢。请尝试traceroute
从您的服务器连接到您的客户端 IP 地址或其网关。此外,请ping
长时间连接到您的客户端 IP 地址以查看数据包丢失率和响应时间。MTU 可能是此问题的另一个来源。测试您是否可以使用 MTU=1500 (Mac: ping -D -s 1472 xx.xx.xx.xx
) 连接到您的客户端。
顺便说一句:如果您的服务器或客户端位于中国,这个问题通常不是您的错。众所周知,GFW 会在边界之间随机丢弃数据包,故意使国际连接质量变差。
答案2
正如该评论所推测的那样,这可能是用户错误,他们正在关闭连接(无论是有意还是无意)。尝试可靠地重现问题。排除它在其他地方发生的可能性,如果只是在那个位置,他们需要在他们那边进行故障排除。尝试使用不同的浏览器/计算机,然后测试网络可靠性。
答案3
这些日志条目看起来类似于我使用 OpenVAS 等工具扫描服务器时显示的条目。这些工具会导致连接不良、运行缓慢或运行不畅;nginx 只是报告某些连接运行不正常。如果所有流量都来自同一来源,并且速度很快,并且在访问日志中没有其他合法请求可以匹配,那么很可能只是机器人扫描器之类的东西。
这些扫描仪还可能使您的应用程序负载过大,从而导致其他合法流量的速度变慢。