如何处理生产环境中的NVM?

3

我正在使用 NVM 来开发一个 Sails 网络应用程序。我通过 NVM 安装了 Node v0.12.7 版本,并使用此版本来运行网站。

nvm use 0.12.7
sails lift

Sails默认使用端口1337,但对于生产环境,我们将其更改为443。问题在于该端口需要root权限,而NVM仅为一个用户安装。因此,如果我尝试sudo sails lift,就会出现错误提示'sails未安装'。
最有效的处理方法是什么?如何使用NVM开发项目并部署它?
我想到了不同的解决方案,但我不知道它们是否好用或不安全。
  1. 使用iptables转发端口。这样做的问题在于socket可能无法工作,因为有代理存在。
  2. 更改端口的权限。如果node有漏洞,则可能存在安全风险。
  3. 使用root安装NVM。问题在于我使用NVM避免使用sudo来部署或运行应用程序,这将强制我这样做。
在这种情况下,最佳实践是什么?
提前感谢你的帮助。

2
为什么解决方案1不起作用?端口转发不是代理。无论如何,我的首选解决方案是始终使用经过充分测试的前端服务器,例如nginx或apache2,然后使用它们来反向代理Web应用程序。 还有其他优点,但对我来说主要原因是安全性——它增加了一个防护层来避免黑客攻击。 - slebetman
同意 - 通过nginx进行反向代理在这种情况下包括套接字完美运作。我根本不考虑使用选项2和3。选项1或我们的新选项4 = nginx / apache / lighttpd等。如果您遇到任何问题并决定走这条路,我很乐意分享我的nginx配置。 - munkee
如果您正在引用Websockets(例如socket.io),那么反向代理有点棘手,但是可以做到(我以前做过)。只需在您选择的服务器上搜索websocket代理即可。尽管您可能需要在生产服务器上使用更高版本的服务器。 - slebetman
2个回答

4
出于安全考虑,不建议以root权限运行NodeJS。
您可以尝试在不使用root权限的情况下,在可访问不同用户的端口上运行应用程序,然后从443端口配置反向代理。这就是我使用nginx作为反向代理所做的,它可以轻松地配置来执行此任务以及处理SSL流量。
在此链接中,您可以找到有关将nginx配置为反向代理的更多信息,它来自官方文档: https://www.nginx.com/resources/admin-guide/reverse-proxy/

0

我通过以下方法解决了这个问题。

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

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以下的端口。

您对此解决方案有何看法?


1
可能不是最好的方法。您可以通过确保部署用户不是root用户,将所有内容安装在该用户下,由非root用户运行所有部署命令,然后让您的服务器(nginx、Apache等)监听443端口,并将请求代理到应用程序运行的任何内部端口来避免所有这些权限问题。认真地说,不要做你正在做的事情。这是不良的实践和不安全的。 - wgp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接