gpt4 book ai didi

node.js - 如何通过 sudo 在生产模式下运行 node.js Express?

转载 作者:搜寻专家 更新时间:2023-10-31 22:19:11 25 4
gpt4 key购买 nike

我正在使用 npm 包 express版本 2.5.2, Node 版本 .0.6.5。我似乎在 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

我在 bootstrap.js 中有这段代码:

var bootstrap_app = module.exports = express.createServer();
//...
console.log(bootstrap_app.settings.env);

这是我看到的标准输出打印内容:

development

这是我的使用问题还是我的系统问题?

编辑:感谢 ThiefMaster 正确地识别出这个问题源于我以 root 身份运行的 Node 。 ThiefMaster 建议使用 iptables 从端口 80 转发到非特权端口,但我的系统给我一个错误。将此讨论移至 superuser.com 或 serverfault.com(后续链接)

最佳答案

出于安全原因,大多数环境变量在使用 sudo 时都未设置。因此,如果不修改 sudoers 文件以允许该变量通过,则无法将该环境变量传递给 Node 。

但是,您无论如何都不应该以 root 身份运行 node。所以这是一个很好的解决方法:
如果您只需要它用于端口 80,请在非特权端口上运行 Node 并设置 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

将 1.2.3.4 替换为您的公共(public) IP,将 2.3.4.5 替换为运行的 IP Node (可以是公共(public) IP 或 127.0.0.1),将 1234 替换为运行的端口 Node 。


使用具有功能支持的足够新的内核,您还可以使用以下命令以 root 身份授予 node 可执行文件 CAP_NET_BIND_SERVICE 权限:

setcap 'cap_net_bind_service=+ep' /usr/bin/node 

请注意,这将允许您系统上的任何用户使用 Node 打开特权端口!

关于node.js - 如何通过 sudo 在生产模式下运行 node.js Express?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9396953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com