Тайм-ауты Apache и ретрансляция TCP
Документация для директивы timeout в apache гласит:
При записи данных клиенту продолжительность времени ожидания подтверждения пакета, если буфер отправки заполнен.
Но если стек TCP не получает и ACK, он будет повторно отправлять пакет. Так как же эти две вещи взаимодействуют? Устанавливает ли таймаут apache общий лимит повторных попыток перед прерыванием соединения?
Контекст - это ситуация, когда тяги curl периодически завершаются ошибкой:
curl: (18) передача закрыта с байтами XXXXXX, остающимися для чтения
и я пытаюсь определить точную причину.
Получив трассировку Wireshark как на клиенте, так и на сервере, кажется, что сервер (apache) по какой-то причине преждевременно завершает сеанс (поэтому не брандмауэр или иное принудительное закрытие). Это происходит для 2 типов файлов, которые часто загружаются: большие двоичные (100-мегабайтные mp4-файлы) и небольшие текстовые файлы (~10 КБ). Для больших файлов есть сообщение журнала Apache:
Указанный тайм-аут истек: [client:] AH01581: Тайм-аут при записи данных для URI /xxxx/xxxx/xxxx/ на клиент
Мое настоящее лучшее предположение состоит в том, что это просто перегрузка сети, так как сбои имеют тенденцию объединяться в определенное время, но я хотел бы зафиксировать это дальше, если это возможно.
Конфигурация:
CentOS 6.6
Apache 2.4.16
Curl 7.19.7