GNU/Linux >> Tutoriales Linux >  >> Linux

502 Error de puerta de enlace incorrecta NGINX [Solución]

¿Cómo te sientes cuando tu cliente envía por WhatsApp una captura de pantalla de su sitio web que dice 502 bad gateway NGINX  ¿error? Nada puede ser peor que esto (para empezar el día), ¿no? Si bien desearía que no comenzaras el día de esa manera, te explicaré cómo recuperarte si te pusieran en esa situación.

Antes de discutir el problema y su solución, me gustaría recordar que mi entorno de hospedaje funciona con el servidor web NGINX con un controlador FPM PHP.

Motivo del error 502 Bad Gateway NGINX

Empecé a depurar el error del registro de errores de NGINX (/var/log/nginx/nginx.log) y encontré el siguiente mensaje de error.

2019/12/11 04:30:43 [error] 27570#27570: *48599 connect() to unix:/var/run/php-fpm/php-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 17.58.98.98, server: techglimpse.com, request: "GET /pure-css3-shapes/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "techglimpse.com"

Es evidente que el mensaje de error está relacionado con el controlador de PHP y eso me redirigió para buscar en el registro de errores de PHP-FPM en /var/log/php-fpm/error.log y noté el siguiente mensaje de error:

[08-Dec-2019 03:30:01] NOTICE: error log file re-opened
[10-Dec-2019 21:00:16] WARNING: [pool www] server reached pm.max_children setting (50), consider raising it

Ahora está claro que el proceso maestro de PHP-FPM no puede generar nuevos procesos secundarios debido a pm.max_children llegando al límite, provocando un error de puerta de enlace incorrecta 502.

Cómo solucionar el error:el servidor alcanzó la configuración pm.max_children, considere generarlo

La solución es aumentar el pm.max_children límite basado en las especificaciones del servidor. Tenga en cuenta que no aumente ciegamente el límite, porque si el sitio web recibe un gran tráfico, los trabajadores nunca se reciclan, el uso de RAM crecerá indefinidamente con el tiempo y el servidor se quedará sin memoria.

Por lo tanto, pm.max_children debe aumentarse con cuidado y gradualmente mientras se supervisa el uso de intercambio.

pm.max_children = ((total RAM in MB) - (RAM usage by MySQL and others taken together in MB)) / 80
Nota

Aquí 80 MB es el peso promedio de un proceso de trabajo de PHP-FPM.

Según el cálculo anterior, aumente el valor de pm.max_children en el archivo de configuración de dominio respectivo de PHP-FPM. En mi caso:  /etc/php-fpm.d/techglimpse.conf

pm = ondemand
pm.max_children = 200

Ahora reinicie los servicios PHP-FPM y NGINX

systemctl restart php-fpm nginx
Nota

Filtra todos los dominios que se han visto afectados con pm.max_children y aplique la configuración anterior solo a los afectados.

Cómo encontrar la memoria utilizada por las aplicaciones

Ejecute el siguiente comando para encontrar la memoria utilizada por las respectivas aplicaciones.

#ps -o pid,user,%mem,command ax | sort -b -k3 -r

PID USER %MEM COMMAND
1355 mysql 14.5 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
543 root 0.3 /usr/lib/systemd/systemd-journald
9254 nginx 0.3 php-fpm: pool www
9251 nginx 0.3 php-fpm: pool www

En el ejemplo anterior, MySQL utiliza casi el 14 % de la memoria total.


Linux
  1. Error:la validación md5 falló para PyYAML-3.11.zip ¿posible problema de descarga? [Solución]

  2. Upstream envió un encabezado demasiado grande al leer el encabezado de respuesta de upstream:error de NGINX

  3. Error de OpenCA:longitud de clave simétrica demasiado corta [Solución]

  4. ¿Error al instalar Nginx en Ubuntu 16.04?

  5. tiempo de espera de puerta de enlace nginx 504

Solucionar el error de Nginx:413 Entidad de solicitud demasiado grande

Integración de PlaySMS Kannel SMS Gateway en NGINX+Debian

Cómo arreglar las conexiones de los trabajadores no son suficientes errores en Nginx

Cómo arreglar el tiempo de espera de la puerta de enlace 504 en Nginx

Cómo reparar el error 502 Bad Gateway en Nginx

getpwnam(www) falló en /etc/nginx/nginx.conf