无法使用端口80

时间:2017-12-20 18:37:30

标签: node.js pm2

我有一个需要在端口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这里概述的问题,只是为了给节点提供这些权利(可能是因为我nodenodejs的符号链接,设置为运行在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上连接。有没有更简单的方法来解决这个问题?我在配置中遗漏了什么吗?

2 个答案:

答案 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启动应用程序!