【发布时间】:2012-02-28 05:04:34
【问题描述】:
我正在测试一个应用程序(希望能在 heroku 上运行,但在本地也有问题)。它在运行 http.Server.listen() 时给了我一个 EACCES 错误 - 但它只发生在某些端口上。
所以,我在本地运行:
joe@joebuntu:~$ node
> var h = require('http').createServer();
> h.listen(900);
Error: EACCES, Permission denied
at Server._doListen (net.js:1062:5)
at net.js:1033:14
at Object.lookup (dns.js:132:45)
at Server.listen (net.js:1027:20)
at [object Context]:1:3
at Interface.<anonymous> (repl.js:150:22)
at Interface.emit (events.js:42:17)
at Interface._onLine (readline.js:132:10)
at Interface._line (readline.js:387:8)
at Interface._ttyWrite (readline.js:564:14)
我没有在端口 900(或我尝试过的其他 20 个端口中的任何一个)上运行任何东西,所以这应该可以工作。奇怪的是它确实在某些端口上工作。例如,端口 3000 可以完美运行。
这是什么原因造成的?
更新 1:
我发现在我的本地计算机上,EACCES 错误即将到来,因为我必须以 root 身份运行节点才能绑定到这些特定端口。我不知道为什么会发生这种情况,但使用 sudo 可以修复它。但是,这并不能解释我将如何在 Heroku 上修复它。在 Heroku 上无法以 root 身份运行,那么如何监听 80 端口?
【问题讨论】:
-
传统上少于 1024 的端口需要提升权限。在 Heroku 上你不监听 80 端口,你监听他们通过环境变量告诉你的端口,并让他们的路由层处理边缘上的 80 端口绑定。
-
您的更新 1 帮助了我。 'sudo node myporgram.js' 让它运行。
-
如果这对任何人都有帮助:双重和三重检查您正在侦听端口 number。由于我在
some string上收听的一个错误,然后你会得到令人困惑的EACCESerrpr。
标签: http node.js permission-denied