javascript – Node.js侦听http 80端口时出现EACCES错误(权限被拒绝)

参见英文答案 > Best practices when running Node.js with port 80 (Ubuntu / Linode) [closed]                                    5个答案                                Node.js在http端口80(默认端口)上运行时会抛出以下错误: –

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)

我想出该节点需要root访问。

通常我们避免在正常情况下进行root访问。在端口80(或端口< 1024)上使用它的最佳做法是什么? 这个link有同样的问题,但只有一个答案,即PREROUTING。虽然我的解决方案也提供其他方式。

我正在写这个在一个地方有所有的答案,因为我必须彻底的其他资源比PREROUTING。为什么不在一个地方分享知识的所有答案

FYI:您不能在端口上运行套接字1024,具有正常的用户权限。您需要具有根访问权。

共有3种方法可以解决错误:

给root访问并运行它(通常是这样)

2.重定向到其他端口

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

然后在端口3000上启动Node.js。端口80的请求将映射到端口3000。

你也应该编辑你的/etc/rc.local文件并添加该行减去sudo。这将在机器启动时添加重定向。您不需要在/etc/rc.local中使用sudo,因为在系统引导时,这些命令以root身份运行。

参考Link

给普通用户以root身份使用套接字的能力

目标: – 我们没有提供完整的root访问权限,只允许一般用户访问socket_root权限,以便在任何端口上运行服务器。

我们不希望以root用户身份运行应用程序,但有一个困难:您的安全用户没有使用默认HTTP端口的权限(80)。您的目标是通过导航到易于使用的URL(http:// localhost)来发布访问者可以使用的网站。

不幸的是,除非您以root身份登录,否则通常必须使用http:// localhost:3000之类的URL – 注意端口号。

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

sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``

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

参考Link

一般信息参考link从apache

翻译自:https://stackoverflow.com/questions/23281895/node-js-eacces-error-when-listening-on-http-80-port-permission-denied

转载注明原文:javascript – Node.js侦听http 80端口时出现EACCES错误(权限被拒绝)