当连接到上游时,NodeJS connect()失败(111:连接被拒绝)
我今天遇到了一个问题,突然间我的Elastic Beanstalk应用程序将我发送到502 Bad Gateway
页面。现在我已经遇到过这个问题,并且发生这种情况的原因是因为Node命令无法启动我的服务器。我通过输入Node command: node main.js
来解决这个问题,直到今天上午我才从未遇到这个问题。突然它停止工作,我得到这个错误,在我的错误日志中:当连接到上游时,NodeJS connect()失败(111:连接被拒绝)
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);
一个502 Bad Gateway
错误通常表明代理(Nginx的中的NodeJS的情况下),不能找到一个目的地路由流量。
看着你的原始错误日志,它看起来像nginx正试图去http://127.0.0.1:8081
。但是,除非已设置ENV变量PORT
,否则main.js
的端口8080将作为回退。
我不知道你是否设置该变量,但尝试切换你的NodeJS应用程序来监听端口8081,看看是否有帮助。
另外,我写这个答案,解释了设置的NodeJS交通可能帮助:elastic beanstalk weird nginx configuration
如果您仍然有问题,你可能需要给你的设置一些更多的信息。
回答
这些都指向没有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假设你的支持是根本错误配置,并wasnt明确表示需要它背后的整个HTTP服务器。一些用户正在尝试启动包含任务管理器的应用程序,这些应用程序管理器正试图启动已存在的事情,并且没有意识到整个后端不需要或正在运行,就像我目前一样。
upstream: "http://[::1]:5555/uploads/logo/df0944721b740b98c10a652ce0dd8296-640.jpg",
如果您在到IPv6上游设置错误 - > [:: 1],本地主机替换在你的nginx的conf 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;
}
}