Node.js + Express:应用程序不会开始侦听端口80

我创build并启动一个像这样的应用程序:

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) 

这也适用于我的笔记本电脑,但不是在我的Amazon EC2实例,端口80打开。 可以弄清楚什么是错的。 有小费吗?

你是否以root身份开始你的应用程序? 由于较低的端口号需要root权限。 也许一个sudo节点app.js的作品?

但是,你不应该运行任何node.js应用程序在80端口的权限! 决不!

我的build议是在前面运行nginx作为您的node.js应用程序运行在端口例如3000上的反向代理

如果你真的想这样做,你可以转发端口80到3000的stream量。

 sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000 

也许还有别的东西在80端口上运行?

也许做一个端口扫描,并确认它没有被使用?

 nc -z <<your IP>> 80 

善良,