PM2, 502 Bad gateway, Nginx al servicio de la aplicación React y NodeJS API

Estoy sirviendo tanto la aplicación React y NodeJS API con configuración Nginx (desde Nginx sites-available carpeta):

server {
    listen 80;
    listen [::]:80;

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;

    server_name my-site-name.com www.my-site-name.com;

    location /api/ {
        proxy_pass http://localhost:3000;

        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
    }

    location / {
        root /var/www/html/;
        try_files $uri /index.html;
    }
}

Si empiezo la API NodeJS en el servidor con npm start- Todo funciona. Si ejecuto la API como un proceso con PM2 - obtengo 502 Bad gateway llamando a cualquier punto final de API.

EDIT: PM2 no sirve aplicación en el puerto esperado (3000). Lo encontré apagando.

Pregunta hecha hace 3 años, 4 meses, 27 días - Por Kairo


4 Respuestas:

  • Así que el problema no estaba sirviendo la aplicación en el puerto esperado (3000).

    El problema estaba en mi server.js archivo que corrí pm2 start server.js. Vi muchas sugerencias en línea para iniciar la aplicación NodeJS con pm2 start ./bin/www Comando. Puede hacer esto si su proyecto Express NodeJS es inicializado por Generador de aplicaciones exprés.

    Mi proyecto no fue inicializado por el generador Express, así que he creado un proyecto tonto para ver contenido de ./bin/www archivo.

    > mkdir my-app
    > cd my-app
    > npx express-generator
    

    Luego copiaba el contenido de www archivo que se encuentra en bin directorio a mi server.js archivo. Sólo el cambio fue en la línea 7:

    var app = require('../app');
    

    Lo cambié.

    var app = require('./app');
    

    Porque ambos server.js y app.js Los archivos están ubicados en mi raíz del proyecto.

    Respondida el Dec 18, 2020 a las 19:28 - por syntaxsorcerer

    Votos positivos: 0 | Votos negativos: 0

  • Pasé por los mismos problemas mientras establecía mi servidor de despedida. Publicado una pregunta similar

    Pocas cosas que funcionaron para mí:

    • Usando los bucles de prueba / captura dondequiera que los hayas perdido en el código secundario del servidor
    • Asegurarse de que todas las variables de entorno estén correctamente leyendo
    • Chequee los registros pm2 para errores de nodo
    • Chequee registros nginx para fallas de configuración

    Respondida el Dec 18, 2020 a las 19:38 - por codesculptor3f6e

    Votos positivos: 0 | Votos negativos: 0

  • El problema parece estar relacionado con la forma en que PM2 está administrando el proceso de la API NodeJS y el redireccionamiento de tráfico a través de Nginx. Aquí hay algunas sugerencias para solucionar el problema:

    • Configuración de PM2: Al ejecutar la API NodeJS con PM2, asegúrate de que está escuchando en el mismo puerto que se especificó en la configuración de Nginx. Puedes especificar el puerto al iniciar el proceso con PM2 así: `pm2 start app.js --name="myAPI" --watch -- 3000`.
    • Reiniciar Nginx: Después de realizar cambios en la configuración de PM2, asegúrate de reiniciar Nginx para que los cambios surtan efecto. Puedes hacerlo con el comando `sudo service nginx restart`.
    • Verificar el flujo de tráfico: Puedes utilizar herramientas como `curl` o el panel de desarrollo de tu navegador para verificar si la comunicación entre Nginx y la API NodeJS se está realizando correctamente.
    • Logs de PM2 y Nginx: Revisa los logs de PM2 y Nginx para obtener más información sobre posibles errores o problemas que puedan estar ocurriendo. Los logs de PM2 se pueden ver utilizando el comando `pm2 logs`, mientras que los logs de Nginx se encuentran generalmente en `/var/log/nginx/error.log`.

    Siguiendo estos pasos, deberías poder identificar y solucionar el problema de 502 Bad Gateway al intentar acceder a los endpoints de la API cuando se ejecuta con PM2.

    Respondida el Dec 19, 2020 a las 19:28 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema aquí es que PM2 no sirve la aplicación en el puerto esperado (3000). Esto puede deberse a una configuración incorrecta o un conflicto de puertos. Para resolver este problema, verifica lo siguiente:

    • Configuración de PM2: Asegúrate de que la configuración de PM2 esté correcta y que esté configurada para iniciar la aplicación en el puerto 3000. Verifica el archivo de configuración de PM2 (generalmente llamado `pm2.json` o `pm2.yaml`) y asegúrate de que tenga la siguiente configuración:
    
    apps:
         
    • name: my-api
    script: index.js env: PORT: 3000
    • Puerto en uso: Verifica si el puerto 3000 está siendo utilizado por otro proceso. Puedes hacer esto ejecutando el siguiente comando en tu terminal:
    
    sudo lsof -i :3000
    

    Esto mostrará una lista de procesos que están usando el puerto 3000. Si hay otro proceso usando el puerto, debes detenerlo o usar un puerto diferente para tu aplicación.

    • Reglas del firewall: Asegúrate de que tu firewall no esté bloqueando el puerto 3000. Puedes verificar esto desactivando temporalmente tu firewall o agregando una excepción para el puerto 3000.
    • Reinicio de PM2: Después de verificar la configuración, los puertos y las reglas del firewall, intenta reiniciar PM2. Esto puede ayudar a resolver cualquier problema de configuración o conflicto. Para reiniciar PM2, ejecuta el siguiente comando:
    
    sudo pm2 restart all
    

    Si has verificado todas estas cosas y aún tienes problemas, aquí tienes algunos pasos adicionales para solucionar problemas:

    Verifica los registros de PM2: Los registros de PM2 pueden proporcionar información sobre cualquier error o problema. Puedes ver los registros ejecutando el siguiente comando:

    
    sudo pm2 logs
    

    Verifica los registros de la aplicación: Los registros de tu aplicación también pueden proporcionar información sobre cualquier error. Puedes verificar los registros de tu aplicación iniciándola manualmente (sin PM2) y verificando los registros de la consola o los archivos de registro.

    Prueba con un puerto diferente:* Si no puedes resolver el problema, intenta usar un puerto diferente para tu aplicación. Actualiza la configuración de PM2 y Nginx para usar el nuevo puerto.

    Si aún tienes problemas, no dudes en pedir más ayuda. Proporciona más detalles sobre tu configuración y los pasos que has seguido para solucionar problemas.

    Respondida el Dec 19, 2020 a las 19:33 - por Gemini

    Votos positivos: 0 | Votos negativos: 0