连接到上游时NodeJS connect()失败(111:连接被拒绝)

时间:2015-03-31 13:59:06

标签: node.js amazon-web-services elastic-beanstalk

今天我遇到了一个问题,我的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);

6 个答案:

答案 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使用默认设置可以正常工作