Estamos planeando migrar nuestra plataforma NodeJS de EC2 simple a ElasticBeanstalk. Durante este proceso, después de algunas dificultades, implementamos nuestra aplicación y pudimos acceder y realizar acciones. Sin embargo, para algunas solicitudes, recibimos el error 502 .
Después de revisar los registros que encontramos a continuación;
2020/03/16 06:12:09 [error] 3009#0: * 119488 recv() falló (104: conexión restablecida por el par) al leer el encabezado de respuesta del flujo ascendente, cliente: xxx.xx.xx.xxx, servidor: , solicitud: "POST /www_auth/register HTTP/1.1", upstream: " http://127.0.0.1:8081/register ", host: "****.us-east-2.elasticbeanstalk.com"
Ocurre al azar y no tengo ni idea. Siento algunos cambios en el nivel de configuración que me perdí/necesito agregar con nginx.
Si tiene algún paso/sugerencia para resolver esto, ¡se lo agradezco!
AWS Elastic Load Balancer se conecta previamente a los servidores de backend y puede provocar una condición de carrera en la que ELB cree que una conexión está abierta, pero el backend de Node.js ya la ha cerrado, debido a server.keepAliveTimeout de 5 segundos de inactividad inactiva, el valor predeterminado en Node.js 8.x y posteriores.
Deshabilite server.keepAliveTimeout y server.headersTimeout para solucionar este problema, o establezca estos tiempos de espera en un valor de ms mayor que el valor de tiempo de espera inactivo de AWS ELB.
const app = express(); // Set up the app... const server = app.listen(8080); // Disable both timeouts server.keepAliveTimeout = 0; server.headersTimeout = 0;El crédito por esta solución es para Shuhei Kagawa:
https://shuheikagawa.com/blog/2019/04/25/keep-alive-timeout/