Press "Enter" to skip to content

Como aumentar el tiempo de ejecución de un script NGINX + PHP-FPM + ELB

Muchas veces necesitamos que ciertos scripts puedan tener un máximo de tiempo de ejecución, sin embargo hay veces que le damos muchas vueltas al asunto y aunque configuremos bien nuestros entornos en algunas ocasiones no podemos ver exactamente donde se encuentra el problema.

Eso me ocurrió justamente el día de ayer, Era necesario aumentar el tiempo de ejecución de un script porque la conexión se caía luego de aproximadamente 120 segundos.

Todo aquel que haya realizado este tipo de configuraciones inmediatamente pensó en php.ini o en el config de nginx y pues están en lo correcto, pero faltaba algo más que tal vez no a todos les suceda pero si a aquellos que usan balanceadores de carga en AWS.

Resulta que luego de darle muchas vueltas en el asunto y realizar diferentes pruebas de incremento de tiempo de ejecución, tanto configurando nginx, php.ini, e incluso un archivo llamado www.conf para configurar php-fpm todo esfuerzo no dio resultados, sin embargo me percate de algo que me dió luces a lo que realmente puede estar pasando. Antes de entrar en la frustración es mejor repensar con calma las cosas y analizar nuevamente desde el origen, tendiendo certezas en las pruebas ya realizadas.

Lo que me dió más luces de lo que estaba sucediendo es que.

  1. Yo tengo una misma imagen de docker corriendo en dos servicios cloud (amazon y google cloud)
  2. El servicio corriendo en google funcionaba correctamente mientras el de amazon se caía la conexión.
  3. Ambos corren en kubernetes y tienen el mismo ingress y configuración con la excepción de que en amazon se le asigna un ELB por defecto al ingress.

Al final del día con todas las pruebas realizadas solo quedaba una ultima opción, y es que no es un problema de configuración de la imagen de docker sino que el problema es que era necesario configurar el tiempo de inactividad de el ELB (elastic load balancer) que provee aws ya que lo encontre configurado por default en 30 segundos.

Escribo este post por que tal vez alguien al igual que yo se la paso todo un día entero buscando la solución a su problema.

A continuación mostrare que es lo que agregué en los archivos de configuración anteriormente mencionados:

php.ini

max_execution_time = 300

nginx conf

fastcgi_read_timeout 300;

www.conf de php-fpm (opcional, no tuve la necesidad.)

request_terminate_timeout = 300

Y lo último ELB (el responsable de todo al final)

Luego de toda esta configuración se pudo notar que la conexión ya no caía, entiendo que tal vez no sea buena practica hacer este tipo de procesos largos durante una conexión HTTP sin embargo en ocasiones es un mal necesario tal vez temporal mientras se ven otras alternativas.

Adolfo Cuadros
Adolfo Cuadros

View all posts