通过端口 80 上的 PM2 运行节点应用



我有一个快递,我想在端口 80 上运行>app.listen(80);

我正在使用PM2来管理应用程序(重新启动、停止、监控等(。我有一个部署外壳脚本,其最后一个命令是PM2 restart index。 从控制台输出中,我没有看到任何错误,并PM2报告它已成功完成命令。 然而,当我到达my.ec2.ip.address:80网站时,该网站还没有启动。 此外,如果我在我的服务器项目目录中运行node index.js,我会得到一个Error: listen EACCES 0.0.0.0:80. 这对我来说是有道理的,因为端口 80 低于 1024,因此是一个特权端口。sudo node index.js将允许启动工作。

我是 unix、服务器、权限和部署的新手,所以除了解决方案之外,对导致我问题的基本概念的解释将不胜感激。 例如。。简单地以超级用户身份运行我的节点应用程序不好吗? 运行PM2(因此可能以..?(根/超级用户运行节点是好的做法吗? 命令sudo PM2 restart index导致sudo: pm2: command not found。 为什么在运行sudo PM2时找不到PM2..如果PM2挡在我的路上?

最终,在使用PM2时,如何确保我的服务器在端口 80 上运行? 未找到。

不要使用端口 80,在其他端口(如 8080(上运行,并使用以下命令将 80 重定向到该端口

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

最好尽可能少地运行特权用户,因为您希望在有人利用您的程序时限制潜在的损害。除非绝对必要,否则您不想以 root 身份运行 Node 代码。

因此,最好在非特权端口(例如端口 8000(上运行 Node 程序,而是让轻量级 Web 服务器(如 Nginx(侦听端口 80,并简单地将流量转发到 Node 程序。

如果你想使用 Nginx,你可以使用这个配置来做我上面描述的,然后只听端口 3000 上的 Node 程序:

server {
listen 80 default;
listen [::]:80 default;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
}
}

对于 ubuntu 服务器,我遇到了同样的问题。 通过下面的教程修复。

sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep /usr/local/bin/node

https://www.digitalocean.com/community/tutorials/how-to-use-pm2-to-setup-a-node-js-production-environment-on-an-ubuntu-vps

这也是PM2的另一个解决方案

sudo apt-get install authbind
sudo touch /etc/authbind/byport/80
sudo chown %user% /etc/authbind/byport/80
sudo chmod 755 /etc/authbind/byport/80

https://pm2.keymetrics.io/docs/usage/specifics/#listening-on-port-80-w-o-root

虽然,您可能已经解决了这个问题,但对于遇到相同问题的人来说,这让我工作:

对于故障排除,请使用sudo npm start运行您的应用程序。如果您的应用程序正常运行,则需要在authbind包的帮助下绑定端口80。 运行以下命令:

sudo apt-get install authbind
sudo touch /etc/authbind/byport/80
sudo chown %user% /etc/authbind/byport/80
sudo chmod 755 /etc/authbind/byport/80

%user%替换为您运行 pm2 的用户。默认情况下,我的是ubuntu的。

package.json文件中start命令设置为pm2 start <server_file_name>。 使用npm start运行应用。它应该有效!

在花费大量时间配置 nginx 后,终于卸载了它并按照 A.J. 的建议配置了 iptables。谢谢A.J.

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

但是,如果有人知道配置nginx的完美教程,那将是一个很大的帮助。

相关内容

  • 没有找到相关文章

最新更新