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?
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
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
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