我可以用低权限运行Node.JS吗?

Dai*_*ail 10 node.js

我想用低权限用户运行节点,是否可能?我需要使用框架Express.js

Kat*_*ato 17

是.根据您的具体需求,有许多解决方案可以执行此操作.

如果要在端口80上运行节点,可以使用nginx(不能与WebSockets一起使用)或haproxy.但也许最快最肮脏的是使用iptables将端口80重定向到您选择的端口:

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8003
sudo iptables -t nat -L
Run Code Online (Sandbox Code Playgroud)

如果您满意,请保存配置并确保iptables在启动时启动

sudo service iptables save
sudo chkconfig iptables on
Run Code Online (Sandbox Code Playgroud)

要以非root用户身份自动启动nodejs服务,并在失败时重新启动它,可以使用如下脚本的upstart:

#!upstart
description "nodeapp"
author      "you"

start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

script
   export HOME="/home/user/"
   exec sudo -u user /usr/local/bin/node /home/user/app.js 2>&1 >> /home/user/app.log
end script
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Amazon EC2安装,或者出现错误sudo: sorry, you must have a tty to run sudo,那么您可以使用以下命令替换exec命令:

#!upstart
description "nodeapp"
author      "you"

start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

script
   export HOME="/home/user/"
   #amazon EC2 doesn’t allow sudo from script! so use su --session-command
   exec su --session-command="/usr/local/bin/node /home/user/app.js 2>&1 >> /home/user/app.log" user &
end script
Run Code Online (Sandbox Code Playgroud)

并且,你没有问这个问题,但为了让它永远运行,请查看monit!以下是使用upstart和monit设置node.js的有用指南.