Prueba y compara el rendimiento de tu PC con nuestro banco de pruebas.

Problema con proxy de Apache


  • Administrador

    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.


  • Administrador

    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.


  • MODERADOR

    Resuelves el problema, desvelas el misterio y encima te metes en otro proyecto. Menudo tío 😎

    Al final te veo aprendiendo ruso 😉

    Salu2! / Ура


  • Veteranos HL

    Para mí Apache siempre es un misterio, cuando me he liado con el, y ya hace tiempo, nunca se como ha conseguido funcionar 😂


Accede para responder