使用端口80(Ubuntu / Linode)运行Node.js的最佳实践

linux Node.js

达蒙逆天JinJin

2020-03-20

我在上设置了我的第一台Node.js服务器,cloud Linux node而我对的细节还很陌生Linux admin(顺便说一句,我不想​​同时使用Apache。)

一切都已正确安装,但我发现除非使用,否则root login无法监听port 80node。但是出于安全原因,我宁愿不以超级用户身份运行它。

最佳做法是:

  1. 为节点设置良好的权限/用户,使其安全/沙盒化?
  2. 允许在这些限制内使用端口80。
  3. 启动节点并自动运行它。
  4. 处理发送到控制台的日志信息。
  5. 任何其他常规维护和安全问题。

我应该将端口80流量转发到其他监听端口吗?

谢谢

第2454篇《使用端口80(Ubuntu / Linode)运行Node.js的最佳实践》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

2个回答
米亚理查德 2020.03.20

授予安全用户使用端口80的权限

请记住,我们不希望以root用户身份运行您的应用程序,但是有一个麻烦:您的安全用户没有使用默认HTTP端口(80)的权限。您的目标是通过导航到易于使用的网址(例如,http://ip:port/

Unfortunately, unless you sign on as root, you’ll normally have to use a URL like http://ip:port - where port number > 1024.

A lot of people get stuck here, but the solution is easy. There a few options but this is the one I like. Type the following commands:

sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``

Now, when you tell a Node application that you want it to run on port 80, it will not complain.

Check this reference link

西门泡芙Jim 2020.03.20

港口80

我在云实例上执行的操作是使用以下命令将端口80重定向到端口3000:

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

然后,我在端口3000上启动Node.js。对端口80的请求将映射到端口3000。

您还应该编辑/etc/rc.local文件并添加减去的那一行sudo这将在计算机启动时添加重定向。您不需要sudo/etc/rc.local因为其中的命令是root在系统引导时运行的

日志

使用forever模块启动您的Node.js。如果崩溃,它将确保重新启动,并将控制台日志重定向到文件。

开机启动

将您的Node.js启动脚本添加到您为端口重定向编辑的文件中/etc/rc.local系统启动时,它将运行您的Node.js启动脚本。

Digital Ocean和其他VPS

这不仅适用于Linode,而且适用于Digital Ocean,AWS EC2和其他VPS提供商。但是,基于RedHat的系统/etc/rc.local/ect/rc.d/local

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android