Mee*_*hta 19 javascript http permission-denied node.js express
在http端口80(默认端口)上运行时,Node.js抛出以下错误: -
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)
我发现该节点需要具有root访问权限.
通常,我们避免在正常情况下提供root访问权限.在端口80(或端口<1024)上使用它的最佳做法是什么.
这个链接有同样的问题,但它只有一个答案,即PREROUTING.虽然我的解决方案也提供其他方法.
我写这篇文章是为了在一个地方得到所有答案,因为我必须通过其他资源而不是PREROUTING.为什么不在一个地方为所有答案分享知识
Mee*_*hta 57
仅供参考:您无法使用普通用户权限在端口<1024上运行套接字.您需要具有root访问权限.
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
Run Code Online (Sandbox Code Playgroud)
然后在端口3000上启动我的Node.js.端口80的请求将映射到端口3000.
您还应该编辑/etc/rc.local文件并添加该行减去sudo.这将在机器启动时添加重定向.在/etc/rc.local中不需要sudo,因为在系统引导时,命令以root身份运行.
参考链接
目标: - 我们不提供完全root访问权限,只提供socket_root权限,以便普通用户在任何端口上运行您的服务器.
我们不希望以root用户身份运行您的应用程序,但是有一个障碍:您的安全用户无权使用默认HTTP端口(80).您的目标是能够通过导航到易于使用的URL来发布访问者可以使用的网站http://localhost
.
不幸的是,除非您以root身份登录,否则通常必须使用类似的URL http://localhost:3000
- 注意端口号.
很多人都被困在这里,但解决方案很简单.有一些选择,但这是我喜欢的.输入以下命令:
sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``
Run Code Online (Sandbox Code Playgroud)
现在,当您告诉Node应用程序您希望它在端口80上运行时,它不会抱怨.
参考链接
来自apache的一般信息参考链接
归档时间: |
|
查看次数: |
26997 次 |
最近记录: |