为了账号安全,请及时绑定邮箱和手机立即绑定

侦听大多数端口时出现Node.js EACCES错误

侦听大多数端口时出现Node.js EACCES错误

慕的地10843 2019-08-30 15:48:28
我正在测试一个应用程序(希望在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上侦听?
查看完整描述

3 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

查看此参考链接:


授予安全用户权限以使用端口80


请记住,我们不希望以root用户身份运行您的应用程序,但有一个障碍:您的安全用户无权使用默认HTTP端口(80)。您的目标是能够通过导航到易于使用的URL来发布访问者可以使用的网站 http://ip:port/


不幸的是,除非您以root身份登录,否则通常必须使用类似的URL http://ip:port- 其中端口号> 1024。


很多人都被困在这里,但解决方案很简单。有一些选择,但这是我喜欢的。输入以下命令:


sudo apt-get install libcap2-bin

sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``

现在,当您告诉Node应用程序您希望它在端口80上运行时,它不会抱怨。


查看完整回答
反对 回复 2019-08-30
  • 3 回答
  • 0 关注
  • 686 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信