web-dev-qa-db-fra.com

Node.js + Express: l'application ne commencera pas à écouter sur le port 80

Je crée et lance une application comme celle-ci:

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

et cela fonctionne (sur le port 3000). Mais quand je vais changer le port en 80, puis en exécutant node app.js affiche ceci:

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)

Cela fonctionne aussi sur mon ordinateur portable, mais pas sur mon instance Amazon EC2, où le port 80 est ouvert. Peut comprendre ce qui ne va pas. Des conseils?

37
Vitaly

Commencez-vous votre application en tant que root? Parce que les numéros de port inférieurs nécessitent des privilèges root. Peut-être qu'un nœud Sudo app.js fonctionne?

MAIS, vous ne devez PAS exécuter d'application node.js sur le port 80 avec des privilèges root !!! JAMAIS!

Ma suggestion est d'exécuter nginx en avant comme proxy inverse de votre application node.js exécutée sur le port, par exemple 3000

63
Thomas Fritz

Si vous voulez vraiment le faire, vous pouvez transférer le trafic sur le port 80 à 3000.

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

Peut-être y a-t-il autre chose en cours d'exécution sur le port 80 précédemment?

Peut-être effectuer une analyse de port et confirmer qu'il n'est pas déjà utilisé?

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