Uno, tiempo de espera de puerta de enlace 504
Explicación oficial : cuando un servidor que funcionaba como puerta de enlace o proxy intentó ejecutar una solicitud, no pudo recibir una respuesta del servidor ascendente (el servidor identificado por el URI, como HTTP, FTP, LDAP) o el servidor secundario (como como DNS) de manera oportuna.
En términos sencillos: en LNMP, nginx no recibió información de php-fpm a tiempo para regresar. He estado esperando su php-fpm durante demasiado tiempo con nginx. Si no me responde, le diré al navegador 504.
Esta simulación también es muy simple, configure los fastcgi_read_timeout
parámetros.
Ejemplo: después de establecer un tiempo de espera de 5 segundos, vuelva a cargar la configuración de nginx y pruebe el script php sleep (6).
server {
...
fastcgi_read_timeout 5;
}
二 、 502 Puerta de enlace incorrecta
Explicación oficial : cuando un servidor que funcionaba como puerta de enlace o proxy intentó ejecutar una solicitud, recibió una respuesta no válida del servidor ascendente.
En términos sencillos: en LNMP, nginx no obtuvo una respuesta válida de php-fpm. Puede haber dos situaciones comunes, una es que php-fpm no se inicia, la otra es que phpcgi ejecuta el script en horas extras y php-fpm mata el proceso. (Además, cada proceso de php-fpm se reiniciará después de recibir una cierta cantidad de solicitudes para evitar pérdidas de memoria y causar 502 intermitentes)
La primera es cerrar php-fpm directamente y aparecerá 502.
El segundo tipo de configuración del período de tiempo de espera implica dos parámetros, a saber, php.ini
medio max_execution_time
y php-fpm.d/www.conf
medio request_terminate_timeout
. max_execution_time
Es el tiempo de ejecución del script. Una vez que se excede el tiempo de ejecución del script, se informará un error. request_terminate_timeout
Es el período de tiempo de espera de la solicitud, que se comenta y se usa de forma predeterminada max_execution_time
.
(1) Primero, probamos el error de tiempo de espera de ejecución del script.
Utilice set_time_limit()
funciones en los scripts para modificar temporalmente los max_execution_time
parámetros. Vale la pena señalar que las set_time_limit()
funciones y las instrucciones de configuración max_execution_time
solo afectan el tiempo de ejecución del script en sí, y el tiempo fuera de la ejecución no se contará, como la función de suspensión, el tiempo de espera para las solicitudes HTTP, etc. Entonces no podemos escribir sleep () para verificar esto.
<?php
set_time_limit(2);
var_dump('start');
$start = time();
for($i = 0;;$i++) {
if(time() - $start > 2) {
break;
}
}
var_dump('end');
En este momento, los dos parámetros son iguales y se producirá un error.
(2) Luego modificamos los request_terminate_timeout
parámetros y eliminamos los comentarios. El 0 por defecto significa ilimitado, y se cambia a 1. Reinicie php-fpm, aparece 502.