2015-03-31 151 views
3

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

回答

6

一个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

如果您仍然有问题,你可能需要给你的设置一些更多的信息。

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假设你的支持是根本错误配置,并wasnt明确表示需要它背后的整个HTTP服务器。一些用户正在尝试启动包含任务管理器的应用程序,这些应用程序管理器正试图启动已存在的事情,并且没有意识到整个后端不需要或正在运行,就像我目前一样。

0
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; 
} 
} 
相关问题