Aar*_*ron 8 development-environment environment-variables production-environment node.js express
我正在使用节点版本为.0.6.5 的npm package express版本2.5.2.我似乎在Debian 4.4.5上运行bash版本4.1.5.
我正在尝试在生产模式下运行我的服务器,但它仍然在开发模式下运行.
我在我的bash shell中运行这些命令:
$ export NODE_ENV=production
$ echo $NODE_ENV
production
$ sudo echo $NODE_ENV
production
$ sudo node bootstrap.js
Run Code Online (Sandbox Code Playgroud)
我在bootstrap.js中有这个代码:
var bootstrap_app = module.exports = express.createServer();
//...
console.log(bootstrap_app.settings.env);
Run Code Online (Sandbox Code Playgroud)
这是我看到的标准印刷出来的:
development
Run Code Online (Sandbox Code Playgroud)
这是我的用法或系统的问题吗?
编辑: 感谢ThiefMaster正确识别此问题源于我作为root运行节点.ThiefMaster建议使用iptables从端口80转发到非特权端口,但是我的系统给了我一个错误.将此讨论发送到superuser.com或serverfault.com(链接到后面)
出于安全原因使用sudo时,大多数环境变量都未设置.因此,您无法在不修改sudoers文件的情况下将该环境变量传递给节点,以允许该变量通过.
但是,您不应该以root身份运行节点.所以这是一个很好的解决方法:
如果您只需要端口80,请在非特权端口上运行节点并设置iptables以将端口80映射到该端口:
iptables -A PREROUTING -d 1.2.3.4/32 -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 2.3.4.5:1234
Run Code Online (Sandbox Code Playgroud)
将1.2.3.4替换为您的公共IP,2.3.4.5,IP节点运行(可以是公共IP或127.0.0.1),1234运行端口节点.
使用具有功能支持的足够新的内核,您还可以使用以下命令以root身份授予node可执行文件CAP_NET_BIND_SERVICE特权:
setcap 'cap_net_bind_service=+ep' /usr/bin/node
Run Code Online (Sandbox Code Playgroud)
请注意,这将允许系统上的任何用户使用节点打开特权端口!
| 归档时间: |
|
| 查看次数: |
14405 次 |
| 最近记录: |