我想用低权限用户运行节点,是否可能?我需要使用框架Express.js
答案 0 :(得分: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
如果您满意,请保存配置并确保iptables在启动时启用
sudo service iptables save
sudo chkconfig iptables on
要以非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
如果您使用的是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
并且,你没有问这个问题,但为了让它永远运行,请查看monit!这是a useful guide to setting up node.js with upstart and monit。