在我的开发盒上有这个限制是非常烦人的,因为除了我之外不会有任何用户.
我知道标准的解决方法,但它们都没有完全符合我的要求:
是否有一些简单的sysctl变量允许非root进程绑定到Linux上的"特权"端口(端口小于1024),或者我只是运气不好?
编辑:在某些情况下,您可以使用功能来执行此操作.
我正在测试一个应用程序(希望在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)
Run Code Online (Sandbox Code Playgroud)
我没有在端口900上运行任何东西(或者我试过的其他20个端口),所以这应该有效.奇怪的是它确实可以在某些端口上运行.例如,端口3000完美运行.
什么会导致这个?
我发现在我的本地计算机上,EACCES错误即将发生,因为我必须以root身份运行节点才能绑定到那些特定端口.我不知道为什么会这样,但使用sudo修复它.但是,这并没有解释我如何在Heroku上修复它.没有办法在Heroku上以root身份运行,那么我怎样才能在端口80上侦听?