Problema con proxy de Apache
-
Buenas,
Durante esta semana he recibido el aviso de tres usuarios de la sección de videos diciendo que no pueden subir videos. Haciendo algunas pruebas he comprobado que si el tiempo de carga del video es superior a 60 segundos, se produce un error de conexión entre Apache y Peertube (NodeJS). El error es el siguiente:
[proxy:error] [pid xxx] (32)Broken pipe: [client xxx.xxx.xxx.xxx:59835] AH01084: pass request body failed to 127.0.0.1:9001 (127.0.0.1), referer: https://video.hardlimit.com/videos/upload
y a continuación, este:
[proxy_http:error] [pid xxx] [client xxx.xxx.xxx.xxx:59835] AH01097: pass request body failed to 127.0.0.1:9001 (127.0.0.1) from xxx.xxx.xxx.xxx (), referer: https://video.hardlimit.com/videos/upload
Sobre el primer error, unas veces sale ese y otras este otro:
[proxy:error] [pid xxx] (104)Connection reset by peer: [client xxx.xxx.xxx.xxx:58520] AH01084: pass request body failed to 127.0.0.1:9000 (127.0.0.1), referer: https://video.hardlimit.com/videos/upload
La aparición de uno u otro es aleatoria.
Esto tiene toda la pinta de que se está produciendo por un timeout así que he añadido a la configuración de Apache esto:
Timeout 900 ProxyTimeout 900 KeepAliveTimeout 600
Pero no soluciona nada. En la configuración del virtualhost, he añadido timeouts al proxy de esta forma:
ProxyPass / http://127.0.0.1:9000/ timeout=600 ProxyPassReverse / http://127.0.0.1:9000/ timeout=600
Pero nada. Para terminar, he modificado el parámetro de configuración del kernel "/proc/sys/net/ipv4/tcp_fin_timeout" que casualmente tenía un valor de 60, pero al cambiarlo por 120 no hay ningún cambio.
Revisando los logs, aparentemente esto ha estado sucediendo desde siempre, pero casualmente, la inmensa mayoría de videos que se han subido hasta ahora, no superaban ese tiempo de subida. Tampoco estoy 100% seguro de que ese timeout fuera antes superior y que alguna actualización lo haya cambiado. La verdad es que es demasiada casualidad que justo 3 personas se quejen la misma semana de lo mismo, pero en fin.
La gente de Peertube no da soporte a Apache, así que como último recurso desesperado, me tocará probar con Nginx (algo que, sinceramente, no me apetece nada de nada). Antes de llegar a eso, si hay por aquí algún docto en cuestiones apachísticas que me pueda dar un poco de luz, se lo agradecería mucho.
-
Bueno, pues definitivamente algo ha cambiado en la última semana. Uno de los afectados había subido en el pasado videos que han tardado en torno a media hora en transferirse. Mirando los logs de APT (algo que tenía que haber hecho antes para dejar de sospechar de Apache) veo que el domingo pasado actualicé NodeJS, así que parece el candidato perfecto de haberla liado parda.
Para solucionarlo, al final he instalado Nginx, así que a partir de ahora, todas las páginas de Hardlimit pasan por ese servidor web. Con esto, se ha solucionado el problema.
La razón por la que creo que se soluciona es que cuando se usaba Apache, al subir un video, este se iba copiando conforme se iba recibiendo a la carpeta temporal de Peertube. Con Nginx, el archivo primero se mete en un buffer del servidor y cuando ha terminado de recibirse, se transfiere a la carpeta temporal de Peertube. Por eso, con Nginx no da timeouts; porque el tiempo de transferencia interno es mucho menor que el externo.
Así que con todo esto, estoy un 99% seguro de que ha sido la maldita actualización de NodeJS, donde por alguna razón, han introducido a pelo un timeout de 60 segundos para las conexiones. Y esto en realidad es un fallo, porque además de fastidiarnos a los díscolos que habíamos preferido evitar Nginx hasta ahora, la velocidad interna es también limitada y al final, el tamaño máximo del archivo será el que de tiempo a transferir en esos 60 segundos.
-
Resuelves el problema, desvelas el misterio y encima te metes en otro proyecto. Menudo tío
Al final te veo aprendiendo ruso
Salu2! / Ура
-
Para mí Apache siempre es un misterio, cuando me he liado con el, y ya hace tiempo, nunca se como ha conseguido funcionar