Назад | Перейти на главную страницу

Сервер не возвращает некоторые запросы к одному провайдеру

у меня есть Линод сервер, который не будет возвращать случайные запросы GET моему обычному интернет-провайдеру (но никогда не застревает на одном и том же каждый раз). Если я переключусь на провайдера или использую Opera VPN, все работает хорошо.

Линод говорит, что им все в порядке. Ресурсы сервера в порядке (это сервер разработки, который в настоящий момент используется только для тестирования, поэтому очень небольшой трафик и накладные расходы). Говорят уточнить у моего провайдера. Мой интернет-провайдер говорит, что все выглядит хорошо, но они попросят инженеров взглянуть на это.

Поскольку я ожидаю от интернет-провайдера ответа «мы ничего не нашли», я пытаюсь найти объективные доказательства того, что происходит, благодаря своим очень ограниченным знаниям в области диагностики. Я отряхнул Wireshark и приступили к диагностике.

Если я использую проблемного интернет-провайдера, с точки зрения браузера это немного случайно. Иногда страница загружается нормально, иногда - нормально, но другие ресурсы не загружаются (css, js, jpeg и т. Д.). Иногда сама страница не загружается и остается «загружающейся» бесконечно без ответа сервера.

Диагноз:

http.time > 1 в Wireshark подтвердил, что проблема не столько в тайм-аутах или длительном времени загрузки, а в том, что запрос либо загружается, либо нет.

В моих заголовках нет ничего необычного, например:

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] в конце, хотя браузер по-прежнему показывал, что страница зависает при загрузке.

Дополнительная информация:


Обновить

Диагноз:

Я пробовал писать подробный текст 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