Вопрос или проблема
при регистрации 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.
-
Открыть файл конфигурации Nginx, который обычно находится по пути
/etc/nginx/sites-available/default
или/etc/nginx/nginx.conf
. -
Проверьте блок
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;
}
}
- Перезагрузите 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 для более глубокой диагностики.