我有一个需要在端口80下运行的Node项目,但是在运行带有端口80的pm2项目时出现问题,我的应用程序的实例运行但是我在端口80上遇到了与EACCESS相同的可预测问题
Error: bind EACCES null:80
at Object.exports._errnoException (util.js:870:11)
at exports._exceptionWithHostPort (util.js:893:20)
at cb (net.js:1302:16)
at rr (cluster.js:594:14)
at Worker.<anonymous> (cluster.js:564:9)
at process.<anonymous> (cluster.js:714:8)
at emitTwo (events.js:92:20)
at process.emit (events.js:172:7)
at handleMessage (internal/child_process.js:689:10)
at Pipe.channel.onread (internal/child_process.js:440:11)
我做了一些研究并尝试了the setcap approach这里概述的问题,只是为了给节点提供这些权利(可能是因为我node
为nodejs
的符号链接,设置为运行在80号港口):
Failed to set capabilities on file `/usr/bin/node' (Invalid argument)
The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file
我尝试将pm2实例作为sudo运行,但没有成功。该进程拒绝在端口80上连接。有没有更简单的方法来解决这个问题?我在配置中遗漏了什么吗?
答案 0 :(得分:1)
如果没有sudo,你就无法收听1024以下的端口号。
答案 1 :(得分:0)
本文是从PM2文档中复制的 http://pm2.keymetrics.io/docs/usage/specifics/
这是一条一般规则,您不应以root用户身份运行节点。但是,只有root可以绑定到小于1024的端口。这是authbind的来源。Authbind允许非root用户绑定到小于1024的端口。将%user%替换为将要运行pm2的用户。
sudo apt-get安装authbind 须藤触摸/ etc / authbind / byport / 80 sudo chown%user%/ etc / authbind / byport / 80 须藤chmod 755 / etc / authbind / byport / 80 您还应该为运行pm2配置文件的用户添加别名,例如〜/ .bashrc或〜/ .zshrc(请注意,之后您需要立即运行source〜/ .bashrc或source〜/ .zshrc):
+ alias pm2 ='authbind --deep pm2' 最后,确保使用authbind更新pm2:
authbind --deep pm2更新 或者,如果您将别名添加到用户的个人资料中,则只需更新pm2。
现在,您可以使用可以绑定到端口80而不需要root用户的PM2启动应用程序!