gpt4 book ai didi

http - 监听大多数端口时出现 Node.js EACCES 错误

转载 作者:IT老高 更新时间:2023-10-28 21:45:21 29 4
gpt4 key购买 nike

我正在测试一个应用程序(希望能在 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 身份运行 Node 才能绑定(bind)到这些特定端口。我不知道为什么会发生这种情况,但使用 sudo 可以修复它。但是,这并不能解释我将如何在 Heroku 上修复它。在 Heroku 上无法以 root 身份运行,那么如何监听 80 端口?

最佳答案

在您的工作站上运行

作为一般规则,没有 root 权限运行的进程不能绑定(bind)到低于 1024 的端口。

所以尝试更高的端口,或通过 sudo 以提升的权限运行。绑定(bind)低端口后可以使用process.setgid 降级权限和 process.setuid .

在 Heroku 上运行

在 heroku 上运行您的应用程序时,您必须使用 PORT 环境变量中指定的端口。

http://devcenter.heroku.com/articles/node-js

const server = require('http').createServer();
const port = process.env.PORT || 3000;

server.listen(port, () => console.log(`Listening on ${port}`));

关于http - 监听大多数端口时出现 Node.js EACCES 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9164915/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com