nginx 502 bad gateway появляется при открытии моего хостинг-сайта, разработанного с использованием nodejs, также при загрузке pm2 показывает, что приложение не определено.

Вопрос или проблема

при регистрации pm2 ошибка показывает /home/ubuntu/.pm2/logs/plantly-error.log последние 15 строк:

0|plantly  |     at Module._compile (node:internal/modules/cjs/loader:1364:14)
0|plantly  |     at Module._extensions..js (node:internal/modules/cjs/loader:1422:10)
0|plantly  |     at Module.load (node:internal/modules/cjs/loader:1203:32)
0|plantly  |     at Module._load (node:internal/modules/cjs/loader:1019:12)
0|plantly  | ReferenceError: app is not defined
0|plantly  |     at Object.<anonymous> (/home/ubuntu/index.js:1:1)
0|plantly  |     at Module._compile (node:internal/modules/cjs/loader:1364:14)
0|plantly  |     at Module._extensions..js (node:internal/modules/cjs/loader:1422:10)
0|plantly  |     at Module.load (node:internal/modules/cjs/loader:1203:32)
0|plantly  |     at Module._load (node:internal/modules/cjs/loader:1019:12)
0|plantly  |     at Object.<anonymous> (/usr/lib/node_modules/pm2/lib/ProcessContainerFork.js:33:23)
0|plantly  |     at Module._compile (node:internal/modules/cjs/loader:1364:14)
0|plantly  |     at Module._extensions..js (node:internal/modules/cjs/loader:1422:10)
0|plantly  |     at Module.load (node:internal/modules/cjs/loader:1203:32)
0|plantly  |     at Module._load (node:internal/modules/cjs/loader:1019:12)

как решить

Я ожидал, что ошибок не будет, но когда я пытаюсь зайти на мой сайт, он показывает 502 bad gateway, почему

Ответ или решение

Решение проблемы 502 Bad Gateway при запуске Node.js приложения с использованием Nginx и PM2

Ошибка 502 Bad Gateway — это проблема, которая часто возникает, когда сервер не может получить корректный ответ от upstream-сервера. В вашем случае, судя по ошибке, которая была зафиксирована в логах PM2, проблема заключается в том, что объект app не определён, что приводит к сбою вашего Node.js приложения.

1. Анализ ошибки

Согласно логам PM2, вы видите следующую строку ошибки:

ReferenceError: app is not defined

Это указывает на то, что ваш код пытается использовать переменную app, которая не была объявлена. Обычно app инициируется в начале вашего приложения при создании экземпляра сервера, например, с использованием Express:

const express = require('express');
const app = express();

Убедитесь, что в вашем файле index.js или в том файле, где вы настраиваете сервер, переменная app действительно объявлена. Если она отсутствует, нужно добавить соответствующий код для её инициализации.

2. Исправление кода

Откройте файл /home/ubuntu/index.js и проверьте, чтобы код начинался с создания экземпляра приложения. Если это Express, он может выглядеть следующим образом:

const express = require('express');
const app = express();

// Настройка маршрутов и middleware
app.get('/', (req, res) => {
    res.send('Hello World!');
});

// Запуск сервера
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log(`Сервер запущен на порту ${PORT}`);
});

Если обращение к app происходит до его определения, переместите все, что зависит от app, ниже его объявления в коде.

3. Перезапуск приложения

После внесения изменений в ваш код, не забудьте перезапустить приложение с помощью PM2:

pm2 restart plantly

Убедитесь, что новое состояние приложения возвращает сообщение об успешном запуске. Проверьте логи PM2 снова на наличие ошибок:

pm2 logs plantly

4. Проверка конфигурации Nginx

Если приложение запускается правильно и app определён, но ошибка 502 всё ещё происходит, необходимо проверить конфигурацию Nginx.

  1. Открыть файл конфигурации Nginx, который обычно находится по пути /etc/nginx/sites-available/default или /etc/nginx/nginx.conf.

  2. Проверьте блок server, который проксирует запросы к вашему приложению Node.js. Он должен быть настроен правильно, например:

server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://localhost:3000; // Убедитесь, что порт совпадает с тем, на котором ваше приложение слушает
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
  1. Перезагрузите Nginx после внесения любых изменений:
sudo nginx -s reload

5. Проверьте состояние приложения

Снова проверьте доступность вашего приложения через браузер:

http://your_domain.com

Если по-прежнему видна ошибка 502 Bad Gateway, убедитесь, что приложение действительно запущено и слушает на ожидаемом порту.

Также полезно использовать утилиты, такие как curl, для тестирования:

curl http://localhost:3000

Если команда curl возвращает ответ от вашего Node.js приложения, это означает, что проблема именно в конфигурации Nginx.

Заключение

Итак, вам необходимо убедиться, что переменная app объявлена, а конфигурация Nginx корректно настроена на проксирование запросов к вашему Node.js приложению. Следуя этим инструкциям, вы сможете устранить проблему и обеспечить доступ к вашему сайту без ошибок. Если возникнут дополнительные сложности, рассмотрите возможность использования более информативных логов как в Node.js, так и в Nginx для более глубокой диагностики.

Оцените материал
Добавить комментарий

Капча загружается...