Ответ 1
приложение всегда должно прослушивать порт 8080, Google перенаправляет все запросы с 80 на 8080 https://cloud.google.com/appengine/docs/f flex/custom- runtimes/build# listen_to_port_8080
Я размещаю веб-приложение на Google Cloud Platform с помощью App Engine, и я использую ExpressJS и MongoDB, который размещен на mLab.
Все хорошо работало до 1 января 2012 года. У меня был vm: true до этого и теперь был вынужден сменить env на flex. Теперь я получаю 502 ошибочную ошибку шлюза с nginx. Механизм приложений не позволяет нам изменять конфигурационный файл nginx.
Я пробовал предложение из этого сообщения: Google App Engine 502 (Bad Gateway) с NodeJS, но по-прежнему не работает.
По какой-то причине у меня есть другое приложение с точно такой же настройкой на движке приложения, и оно отлично работает.
Любое предложение будет принята с благодарностью. Спасибо.
приложение всегда должно прослушивать порт 8080, Google перенаправляет все запросы с 80 на 8080 https://cloud.google.com/appengine/docs/f flex/custom- runtimes/build# listen_to_port_8080
проверить журналы для любых ошибок развертывания
$ gcloud app logs read
Я столкнулся с аналогичной проблемой с кодом, представленным в этом уроке (https://cloud.google.com/nodejs/getting-started/authenticate-users)
И обнаружил, что отсутствовала зависимость. Я исправил недостающую зависимость, и приложение развернуто и работает нормально.
Подробности в проблеме: https://github.com/GoogleCloudPlatform/nodejs-getting-started/issues/106
У меня была такая же проблема с Express. Для меня это было не для того, чтобы предоставить IP-адрес приложения.
Итак, мой старый код:
var ip = "127.0.0.1";
var port = "8080";
var server = http.createServer(app);
server.listen(port, ip);
Это приведет к 502 в движке приложения.
Удаление ip было для меня решением.
server.listen(port);
A 502 не обязательно является ошибкой с самим nginx, чаще всего это происходит, когда прокси-сервер nginx не может разговаривать с вашим контейнером приложения (обычно из-за невозможности запуска вашего приложения). Если вы получили 502 после перехода на "env: flex", это, скорее всего, связано с некоторыми изменениями кода, необходимыми в вашем приложении, как указано в "Обновление до последнего приложения" Гибкая версия среды для двигателей.
Проверка ваших журналов для ошибок из NPM также поможет определить точную причину неудачного запуска.
Установите хост на 0.0.0.0
Порт 8080
по умолчанию установлен двигателем. На самом деле вы не можете определить переменную окружения PORT
поскольку она зарезервирована.
Запустите следующую команду (как упомянуто @sravan)
gcloud app logs read tail
и убедитесь, что это выглядит так,
[Sun May 27 2018 10:32:44 GMT+0000 (UTC)] serving app on 0.0.0.0:8080
ура
Пожалуйста, позаботьтесь о http также, при развертывании, это должен быть http-сервер, а не https
var server;
if (process.env.NODE_ENV == "dev") {
server = https.createServer(httpsOptions, app);
} else {
server = http.createServer(app);
}
Google App Engine использует фронт nginx для балансировки нагрузки всех запросов на приложения node.js. Когда nginx выступает в качестве прямого прокси-сервера, эта ошибка обычно возникает, когда запрос, который пользователь делает в браузере, достигает nginx (вы видите страницу ошибок неверного шлюза 502 без стиля), но сервер nginx не может правильно перенаправить запрос на ваш сервер. приложение узла Может быть много проблем, почему это происходит, но вот некоторые из них:
По умолчанию App Engine предполагает, что приложение вашего узла работает на 8080. Сам nginx будет работать на 80 и перенаправит запрос на 8080. Проверьте, не является ли номер порта вашего приложения 8080.
Ваше приложение может иметь hostname
, определенный как домен something.appspot.com
или IP 127.18.21.21
или тому подобное. Удалите любые имена хостов из ваших server.listen
или config.json
или vhost
где угодно. App Engine позаботится о доменах, IP-адресах и т.д., Поэтому вам не придется.
Ваше приложение может зависать перед отправкой ответа на nginx. Проверьте журналы как nginx, так и приложения вашего узла.
Чтобы проверить журналы/выяснить, что происходит, используйте это руководство https://cloud.google.com/appengine/docs/flexible/nodejs/debugging-an-instance#connecting_to_the_instance для SSH непосредственно внутри виртуальной машины за механизмом приложения. В nginx будет один докер-процесс, в котором вы сможете просмотреть журнал ошибок nginx и один образ докера в приложении вашего узла, чтобы проверить сообщение об ошибке приложения вашего узла.
Мне просто интересно, исходя из активности в этом вопросе и временных меток, почему Google не обновил свою документацию для освещения этой проблемы !!!???
Создайте сервер и затем проверьте с помощью троичного условия, является ли текущая среда производственной или нет, назначьте порт '80', если текущая среда находится в разработке, иначе назначьте process.env.NODE.ENV.
const app = require('express')();
const server = require('http').Server(app);
const port = process.env.NODE_ENV === 'production' ? process.env.PORT :'80';
server.listen(port, ()=> {
console.log('listening on port number *:' + server.address().port);
});