次のようなアプリを作成して起動します。
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インスタンスでは機能しません。何が悪いのか理解できます。任意のヒント?
アプリをルートとして起動していますか?低いポート番号にはルート権限が必要だからです。たぶん、Sudoノードのapp.jsは動作しますか?
ただし、root権限でポート80でnode.jsアプリを実行しないでください!!!絶対に!
私の提案は、ポートで実行されているnode.jsアプリのリバースプロキシとしてnginxを前に実行することです3000
本当にこれを行いたい場合は、ポート80のトラフィックを3000に転送できます。
Sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
おそらく以前にポート80で実行されている何か他のものがありますか?
おそらくポートスキャンを実行し、まだ使用されていないことを確認しますか?
nc -z <<your IP>> 80