今天我遇到了一个问题,我的Elastic Beanstalk应用程序突然将我发送到502 Bad Gateway
页面。现在我遇到过这个问题,之所以发生这种情况,是因为Node命令无法启动我的服务器。我通过输入Node command: node main.js
来解决这个问题,直到今天早上我才开始讨论这个问题。突然它停止工作,我在错误日志中得到了这个错误:
2015/03/31 13:07:17 [error] 697#0: *519 connect() failed (111: Connection refused) while connecting to upstream, client: 54.146.12.189, server: , request: "HEAD / HTTP/1.1", upstream: "http://127.0.0.1:8081/", host: "54.152.12.19"
2015/03/31 13:07:17 [error] 697#0: *521 connect() failed (111: Connection refused) while connecting to upstream, client: 54.146.18.189, server: , request: "GET /clientaccesspolicy.xml HTTP/1.1", upstream: "http://127.0.0.1:8081/clientaccesspolicy.xml", host: "54.152.12.19"
2015/03/31 13:16:02 [error] 697#0: *523 connect() failed (111: Connection refused) while connecting to upstream, client: 69.204.65.1321, server: , request: "GET /blog/the-differences-in-segmenting-your-data-by-users-and-sessions HTTP/1.1", upstream: "http://127.0.0.1:8081/blog/the-differences-in-segmenting-your-data-by-users-and-sessions", host: "www.mywebsite.com"
我应该如何解决这个问题?
这是我的main.js
文件:
//Load express
var express = require('express');
var app = express();
var router = express.Router(); // get an instance of the router
var bodyParser = require('body-parser'); // configure app to use bodyParser()
var mongoose = require('mongoose');
var passport = require('passport');
var flash = require('connect-flash');
var morgan = require('morgan');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var aws = require('aws-sdk');
app.use(bodyParser.urlencoded({ extended: true})); // get data from a POST method
app.use(bodyParser.json());
app.use(morgan('dev'));
app.use(cookieParser());
var port = process.env.PORT || 8080; // set the port
var DB_CONFIG = process.env.DB_CONFIGURATION;
var AWS_ACCESS_KEY = process.env.AWS_ACCESS_KEY;
var AWS_SECRET_KEY = process.env.AWS_SECRET_KEY;
var S3_BUCKET = process.env.S3_BUCKET;
var blogDB = require('./config/blogDB.js');
mongoose.connect(blogDB.url);
require('./config/passport.js')(passport);
app.set('view engine', 'ejs'); // set ejs as the view engine
app.use(express.static(__dirname + '/public')); // set the public directory
app.use(session({ secret: 'thisisatest' }));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
var routes = require('./app/routes');
app.use(routes); // use routes.js
app.listen(port);
console.log('magic is happening on port' + port);
答案 0 :(得分:9)
502 Bad Gateway
错误通常表明代理(NodeJS案件中的Nginx)无法找到路由流量的目的地。
查看原始错误日志,看起来nginx正在尝试转到http://127.0.0.1:8081
。但是除非设置了ENV变量main.js
,否则PORT
将端口8080作为后备。
我不知道您是否设置了该变量,但尝试切换您的NodeJS应用程序以侦听端口8081并查看是否有帮助。
此外,我已经写了这个答案,解释了可能有用的流量的NodeJS设置:elastic beanstalk weird nginx configuration
如果您仍有问题,可能需要提供有关设置的更多信息。
答案 1 :(得分:2)
upstream: "http://[::1]:5555/uploads/logo/df0944721b740b98c10a652ce0dd8296-640.jpg",
如果上游设置为ipv6时出错 - > [:: 1],在你的nginx conf中将localhost替换为127.0.0.1。
server {
listen 80;
server_name mydomain.com;
location / {
client_max_body_size 20M;
client_body_buffer_size 128k;
#proxy_pass http://localhost:5552;
proxy_pass http://127.0.0.1:5552;
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;
}
}
答案 2 :(得分:1)
我知道这是一篇超级老帖子,但我的主机提供商正在重启我的节点服务器时遇到了同样的问题。当服务器重置时,它也会导致mongoDB关闭。
当永远使用尝试重新启动节点服务器时:
2018/04/12 06:49:32 [error] 23434#23434: *27 connect() failed (111: Connection refused) while connecting to upstream, client:
日志文件并未表明mongo特别是错误,但如果您尝试手动启动服务器:
node /server/server.js
Connection fails: MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]
重新启动mongoDB后,可以重新启动服务器:
sudo mongod &
然后只需重新启动服务器就可以了。
答案 3 :(得分:1)
在“ beanstalk”应用程序的“配置修改软件”部分添加“节点”命令很重要,如果您的应用程序使用的是启动命令,那么将其用作节点命令“ npm start”即可正确启动应用程序,这也很重要使用文件夹和文件bin / www启动Nodejs服务器时会发生这种情况。
答案 4 :(得分:0)
<强>答案强>
这些都指向没有http服务器响应,这意味着您的http服务器没有应答请求。
在日志中指出这一点的确切部分如下。
connect() failed (111: Connection refused) while connecting to upstream
server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:
确保已采取步骤启动它,并确保在生成错误时当前正在运行。
它也可能指向http服务器js文件本身的配置错误。
要获得更好的想法,请查看/var/log/nginx/error.log中的错误日志。如果您看到代理后端的连接错误,如上所述,那么可能就是这种情况。
查看连接到已定义的代理是否有问题。确保节点进程管理器在该代理端口上正在运行并正确配置。例如如果您正在运行节点应用程序,请查找pm2或用于启动http服务器的任何节点模块。
pm2 show
OA假设您的支持只是配置错误,并且不清楚它背后是否需要整个http服务器。一些用户正在尝试启动包含任务管理器的应用程序,这些应用程序管理器正在尝试启动已存在的事物,并且不会意识到整个后端不需要或正在运行,就像我自己一样。
答案 5 :(得分:0)
在beantalk下,转到配置,然后转到软件,在节点命令上添加npm start。这将是您的默认设置。 Nginx使用默认设置可以正常工作