web-dev-qa-db-ja.com

アップストリームへの接続中にNodeJS connect()が失敗しました(111:接続が拒否されました)

今日、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);
12
cphill

502 Bad Gatewayエラーは通常、プロキシ(NodeJSの場合はNginx)がトラフィックのルーティング先を見つけられないことを示しています。

元のエラーログを見ると、nginxがhttp://127.0.0.1:8081にアクセスしようとしているようです。ただし、main.jsには、ENV変数PORTが設定されていない限り、フォールバックとしてポート8080があります。

その変数を設定しているかどうかはわかりませんが、NodeJSアプリをポート8081でリッスンするように切り替えて、それが役立つかどうかを確認してください。

さらに、この回答を書いて、役立つかもしれないトラフィックのNodeJSセットアップを説明します。 elastic beanstalk weird nginx configuration

それでも問題が解決しない場合は、セットアップについてさらに情報を提供する必要があるかもしれません。

14
Josh Davis
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;
}
}
4
keithics

Beanstalkアプリの構成変更ソフトウェアセクションにNodeコマンドを追加することが重要です。アプリがコマンドstartを使用している場合は、それをノードコマンド「npm start」として使用します。アプリが正しく、これはフォルダーとファイルbin/wwwを使用してNodejsサーバーを起動するときにも発生します。

1
Héctor BlisS

Beanstalkの下で、構成に移動してから、ソフトウェアに移動し、npm start on nodeコマンドを追加します。これがデフォルトの設定になります。 Nginxはデフォルト設定で正常に動作します

1
Ally Makongo

私はこれが非常に古い投稿であることを知っていますが、ホスティングプロバイダーによってノードサーバーが再起動されるという同じ問題が発生しました。サーバーがリセットすると、mongoDBもシャットダウンされました。

Foreverを使用してノードサーバーを再起動する場合:

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 &

その後、サーバーを再起動するだけで問題ありません。

1
Husk Rekoms

回答

これらはすべて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サーバー全体が必要であることは明らかではありませんでした。一部のユーザーは、存在することを起動しようとしているタスクマネージャーを含むアプリを起動しようとしていますが、現時点でのように、バックエンド全体が不要または実行されていなかったことに気付きません。

0
blamb