诊断:

诊断:

我有一个利诺德服务器不会向我常用的 ISP 返回随机 GET 请求(但不会每次都卡在同一个请求中)。如果我更换 ISP 或使用Opera VPN,一切运行良好。

利诺德他们说一切正常。服务器资源正常(这是一台开发服务器,目前仅用于测试,因此流量和开销非常小)。他们说要与我的 ISP 核实。我的 ISP 说一切正常,但他们会让工程师查看一下。

由于我期待着 ISP 的回复是“我们什么也没发现”,所以我试图通过我非常有限的诊断知识来寻找客观证据。我掸掉了Wireshark并开始诊断。

如果我使用有问题的 ISP,从浏览器的角度来看,它会有点杂乱无章。有时页面加载正常,有时加载正常但其他资源无法加载(css、js、jpeg 等)。有时页面本身无法加载,并且会无限期地保持“加载”状态,而没有服务器响应。

诊断:

http.time > 1Wireshark确认问题不在于超时或加载时间过长,而在于请求是否加载。

我的标题没有显示任何异常,例如:

GET /theme/css/style.css HTTP/1.1
Host:site.com
Accept:text/css,*/*;q=0.1
Accept-Language:en-ie
Accept-Encoding:gzip, deflate
Connection:keep-alive
Pragma:no-cache
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
Referer:http%3a//site.com/section/
DNT:1
Cache-Control:no-cache

当我捕捉Wireshark,当请求在浏览器中停滞时,我没有看到太多反馈。但是,上次我尝试时,我确实收到了重复的请求:

localhost   server  TCP 66  [TCP Retransmission] 61162 → 80 [FIN, ACK]

每分钟播出一次,直到最后结束[RST, ACK],但浏览器仍然显示页面卡在加载状态。

更多信息:

  • 我在所有测试中都禁用了缓存,但缓存也已被清空并且 DNS 也被刷新了。
  • 这可能无关紧要,因为这种结果发生在使用标准 ISP 连接的网络上的每个设备和浏览器上。
  • 我已测试过的任何其他 ISP 或 VPN 都可以使用相同的设备和浏览器从服务器成功加载所有请求。
  • 我已按照 ISP 的标准诊断程序重置了调制解调器和路由器固件
  • 我已尝试将 DNS 切换为 Google 的。
  • 我已经更新了服务器上的所有软件包(运行 Apache 的 Ubuntu)
  • 除了在问题出现后执行的这些更新之外,我没有更改服务器上的任何配置或更新。它已经运行了大约两个月,大约两天前开始出现这种情况。
  • 正在对常规 http 进行诊断
  • 我出于开发目的向服务器发出了大量请求,并向我的 ISP 询问这是否会触发某些活动标志 - 他们向我保证不会发生类似的事情。
  • 不幸的是我无法在这里列出服务器。
  • 我对其他网站没有意见。
  • ISP 速度和延迟不是问题。
  • 服务器上运行的所有三个虚拟主机都会受到影响,尽管它们只是为了将子域或 http 重定向到 https 请求而存在,因为始终使用同一个域。

更新

诊断:

我尝试curl对服务器上的单个资产(本例中为 jpeg)运行详细请求。我对下载 jpeg 的请求前三次都运行正常,唯一的异常(除非这是预料之中的?)是同一文件的下载字节数在某些请求中会发生变化。例如:

curl 请求 1:

< Content-Type: image/jpeg
< 
{ [2642 bytes data]
* Curl_http_done: called premature == 0
100  384k  100  384k    0     0   994k      0 --:--:-- --:--:-- --:--:--  995k

curl 请求2:

< Content-Type: image/jpeg
< 
{ [1194 bytes data]
* Curl_http_done: called premature == 0
100  384k  100  384k    0     0   852k      0 --:--:-- --:--:-- --:--:--  853k

curl 请求 3:

< Content-Type: image/jpeg
< 
{ [2642 bytes data]
 26  384k   26  101k    0     0   493k      0 --:--:-- --:--:-- --:--:--  493k
* Curl_http_done: called premature == 0
100  384k  100  384k    0     0  1000k      0 --:--:-- --:--:-- --:--:-- 1000k

然后第四个请求不会下载文件,报告错误或关闭连接。我在浏览器中看到的行为相同。数据字节停留在正在运行的计时器上,现在接近 2 分钟:

 Content-Type: image/jpeg
< 
{ [1194 bytes data]
  5  384k    5 22914    0     0     66      0  1:39:18  0:05:43  1:33:35     0

感觉请求到达了服务器,但后来的通信却没有到达我这里。以下是最后一个请求的完整内容(30 秒后):

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying (IP ADDRESS)...
* TCP_NODELAY set
  0     0    0     0    0     0      0      0 --:--:--  0:00:05 --:--:--     0* Connected to serverdomain.com (IP ADDRESS) port 80 (#0)
  0     0    0     0    0     0      0      0 --:--:--  0:00:06 --:--:--     0> GET /images/user/176131.jpg HTTP/1.1
> Host: serverdomain.com
> User-Agent: curl/7.51.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Fri, 18 Aug 2017 14:04:20 GMT
< Server: Apache/2.4.18 (Ubuntu)
< Last-Modified: Thu, 17 Aug 2017 09:04:47 GMT
< ETag: "60048-556ef4de2cad8"
< Accept-Ranges: bytes
< Content-Length: 393288
< Connection: close
< Content-Type: image/jpeg
< 
{ [1194 bytes data]
  5  384k    5 22914    0     0     50      0  2:11:05  0:07:36  2:03:29     0

相关内容