亚马逊EC2错误:监听EACCES 0.0.0.0:80

13

我已经将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

你应该创建或使用现有的nginx用户,具有代理所有请求到80端口的特权,而不是使用sudo,因为后者会向外部人员打开根选项。详情请参见:https://dev59.com/glsW5IYBdhLWcg3wXmO5#35069615 - boldnik
6个回答

20

如果您想监听80端口,可能需要使用sudo运行您的node.js脚本。


FYI,这不是安全的解决方案。 - boldnik
2
如果我使用sudo node命令,它会显示找不到该命令。 - KylianMbappe
为什么不安全? - SILENMUS

6

如果要监听低端口(小于1024),则不能在没有root权限的情况下运行进程。

你可以尝试像上面提到的那样以sudo身份运行,或者使用反向代理(例如nginx),在另一个端口上启动进程,并使用反向代理将调用从端口80转发到你启动进程的端口。


3
错误代码 EACCES 表示您没有适当的权限在该端口上运行应用程序。在 Linux 系统上,任何低于 1024 的端口都需要 root 访问权限。

我不知道哪些需要根访问权限的1024以下端口,感谢您提供的宝贵信息。 - AmerllicA

1
您需要使用反向代理将端口80的请求转发到8080,例如。

0

当我尝试通过npm命令执行node脚本时,遇到了这个问题。为了解决这个问题,我直接使用node命令来执行它。(还需要使用sudo)。

从:

sudo npm run start

到:

sudo node index.js


0
你绝对不能以root权限运行Web应用程序!
你可以使用setcap命令,让Node在特权端口上监听而无需root权限。
sudo setcap 'cap_net_bind_service=+ep' $(which node)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接