web-dev-qa-db-ja.com

Node.js + Express:アプリはポート80でリッスンを開始しません

次のようなアプリを作成して起動します。

express -s -t ejs
npm install express
npm install ejs
node app.js

動作します(ポート3000)。しかし、ポートを80に変更し、node app.jsはこれを出力します。

node.js:198
throw e; // process.nextTick error, or 'error' event on first tick
          ^
TypeError: Cannot call method 'getsockname' of null
at HTTPServer.address (net.js:746:23)
at Object.<anonymous> (/var/www/thorous/app.js:35:67)
at Module._compile (module.js:432:26)
at Object..js (module.js:450:10)
at Module.load (module.js:351:31)
at Function._load (module.js:310:12)
at Array.<anonymous> (module.js:470:10)
at EventEmitter._tickCallback (node.js:190:26)

これはラップトップでも機能しますが、ポート80が開いているAmazon EC2インスタンスでは機能しません。何が悪いのか理解できます。任意のヒント?

37
Vitaly

アプリをルートとして起動していますか?低いポート番号にはルート権限が必要だからです。たぶん、Sudoノードのapp.jsは動作しますか?

ただし、root権限でポート80でnode.jsアプリを実行しないでください!!!絶対に!

私の提案は、ポートで実行されているnode.jsアプリのリバースプロキシとしてnginxを前に実行することです3000

63
Thomas Fritz

本当にこれを行いたい場合は、ポート80のトラフィックを3000に転送できます。

Sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
76
Michael Connor

おそらく以前にポート80で実行されている何か他のものがありますか?

おそらくポートスキャンを実行し、まだ使用されていないことを確認しますか?

nc -z <<your IP>> 80
0
Daniel Elliott