我已经将 HTTP TCP 端口 80 添加到入站规则中,但仍然收到错误:
Error: listen EACCES 0.0.0.0:80
at Object._errnoException (util.js:992:11)
at _exceptionWithHostPort (util.js:1014:20)
at Server.setupListenHandle [as _listen2] (net.js:1338:19)
at listenInCluster (net.js:1396:12)
at doListen (net.js:1505:7)
at _combinedTickCallback (internal/process/next_tick.js:141:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
at Function.Module.runMain (module.js:695:11)
at startup (bootstrap_node.js:191:16)
at bootstrap_node.js:612:3
您可能必须使用 sudo 运行 Node.js 脚本,因为您想监听端口 80。
如果没有 root 权限,则无法运行侦听低端口(低于 1024)的进程。
您可以尝试以
sudo
身份运行,如上所述,或者开始使用反向代理(例如 nginx),在另一个端口上启动进程并使用反向代理将调用从端口 80
转发到任何端口您启动进程的端口。
错误代码 EACCES 表示您没有适当的权限在该端口上运行应用程序。在 Linux 系统上,任何低于 1024 的端口都需要 root 访问权限。
例如,您需要使用反向代理将呼叫从端口 80 转发到 8080。
我在尝试通过
node
命令执行 npm
脚本时遇到了这个问题。为了解决这个问题,我直接使用 node
命令执行它。 (还需要使用sudo
)。
来自:
sudo npm run start
致:
sudo node index.js
您应该永远不以root权限运行网络应用程序!
您可以使用 setcap 允许节点在没有 root 的情况下侦听特权端口。
sudo setcap 'cap_net_bind_service=+ep' $(which node)