【问题标题】:How deal with NVM in production environments?生产环境如何处理 NVM?
【发布时间】:2016-11-24 15:49:05
【问题描述】:

我正在使用 NVM 开发 Sails Web 应用程序。我已经通过 NVM 安装了 node v0.12.7,我使用这个版本来运行网站。

nvm use 0.12.7
sails lift

Sails 默认使用 1337 端口,但在生产环境中我们将其更改为 443。问题是该端口需要 root 权限,并且 NVM 只为一个用户安装。因此,如果我尝试 sudosails lift,我会收到一条错误消息,提示 sails 未安装

解决这个问题最有效的方法是什么?如何使用 NVM 开发和部署我的项目?

我想过不同的可能解决方案,但我不知道它们是好的还是不安全的。

  1. 使用iptables 转发端口。问题是由于代理,套接字无法工作。
  2. 更改端口的权限。如果节点存在漏洞,则可能存在安全风险。
  3. 使用 root 安装 NVM。问题是我使用 NVM 来避免使用 sudo 来部署或运行​​应用程序,这将迫使我这样做。

在这种情况下有哪些最佳做法?

提前致谢。

【问题讨论】:

  • 为什么解决方案 1 不起作用?端口转发不是代理。无论如何,我首选的解决方案是始终拥有经过实战考验的前端服务器,例如 nginx 或 apache2,然后使用它们来反向代理 Web 应用程序。还有其他优点,但对我来说主要原因是安全性——它为黑客增加了一层。
  • 同意 - 通过 nginx 的反向代理非常适合这种场景,包括套接字。我根本不会考虑使用选项 2 和 3。选项 1 或我们的新选项 4 = nginx/apache/lighttpd 等。如果您遇到任何问题并决定走这条路,很高兴分享我的 nginx 配置。
  • 如果您指的是 websockets(如 socket.io),那么反向代理有点棘手但可行(我以前做过)。只需谷歌搜索您选择的服务器的 websocket 代理。尽管您可能需要在生产服务器上使用更新版本的服务器。

标签: javascript node.js sails.js iptables ports


【解决方案1】:

我已经解决了以下问题。

我已经更改了节点的所有者和组。

which node # gives a string with the path to node
sudo chown root:root path_to_node
sudo chmod u+s path_to_node

这样,执行节点的任何用户都将使用所有者权限执行此操作。并且在这种情况下,所有者是root,其权限足以使用1024以下的端口。

您如何看待这个解决方案?

【讨论】:

  • 可能不是最好的方法。您可以通过确保您的部署用户不是 root 来避免所有这些权限问题,在该用户下安装所有内容,所有部署命令都应由该非 root 用户运行,然后您拥有您的服务器(nginx、Apache 等)监听 443 并让它代理请求到您的应用程序运行的任何内部端口。说真的,不要做你正在做的事情。这是不好的做法,也不安全。
【解决方案2】:

出于安全原因,不建议使用 root 权限运行 NodeJS。

您可以尝试在没有 root 权限的其他用户可访问的端口上运行您的应用程序,然后在 443 端口上配置反向代理。这就是我使用 nginx 作为反向代理所做的,可以轻松配置它来执行此任务以及处理 SSL 流量。

在这个链接上你可以找到更多关于配置 nginx 作为反向代理的信息,它来自官方文档: https://www.nginx.com/resources/admin-guide/reverse-proxy/

【讨论】:

    猜你喜欢
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多