2015-03-31 143 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; 
} 
} 
相關問題