Eldocumentación para la directiva de tiempo de esperaen apache afirma que:
Al escribir datos en el cliente, el tiempo que se debe esperar para recibir un acuse de recibo de un paquete si el búfer de envío está lleno.
Pero si la pila TCP no recibe un ACK, volverá a enviar el paquete. Entonces, ¿cómo interactúan estas dos cosas? ¿El tiempo de espera de Apache establece un límite general de reintentos antes de cancelar la conexión?
El contexto es una situación en la que los curl pulls fallan periódicamente con el error:
curl: (18) transferencia cerrada con XXXXXX bytes restantes para leer
y estoy tratando de determinar la razón exacta.
Después de haber realizado un seguimiento de Wireshark tanto en el cliente como en el servidor, parece que el servidor (Apache) está finalizando la sesión prematuramente por algún motivo (por lo que no es un firewall u otro que la obligue a cerrar). Esto sucede con 2 tipos de archivos que se descargan con frecuencia: archivos binarios grandes (100 mb mp4) y archivos de texto pequeños (~10 kb). Para los archivos grandes hay un mensaje de registro de Apache:
El tiempo de espera especificado ha expirado: [cliente:] AH01581: Tiempo de espera al escribir datos para URI /xxxx/xxxx/xxxx/ en el cliente
Mi mejor suposición actual es que esto es simplemente una congestión de la red, ya que las fallas tienden a agruparse en ciertos momentos, pero me gustaría precisarlo más si es posible.
Configuración:
CentOS 6.6
Apache 2.4.16
Rizo 7.19.7