为什么Node.js不能在共享主机上运行?

61

第一件事:我搜索了所有已知的Web主机公司,寻找用于Node.js的共享主机,但我没有找到任何一个。然后我知道了Node.js不能在共享主机系统上运行,我想知道为什么?

第二件事:我是一个普通人,预算有限。选择VPS、专用服务器或云托管可以使节点运行,但与PHP共享主机服务相比,这超出了我的经济承受范围,所以我应该学习node.js吗?


3
可以!请看我的答案 - niutech
尝试这个解决方案 https://medium.com/p/52e12a62a259/responses/show - Fayaz
6个回答

29
理论上是可以的,但实际上要看托管提供商是否有这样的基础设施。与经典Web平台相比,Node是一个自我可持续的平台。以PHP为例,它运行在Apache或Nginx(或任何其他)之一上,PHP本身只是一个脚本语言,带有一些库,除了逻辑实现外并没有太多作用,并且需要Web服务器解决方案。Web服务器创建套接字以侦听特定端口的流量,执行其自己的魔法并执行PHP以处理请求。与此同时,Node.js创建自己的套接字,并将其绑定到自己的端口上。这使它具有更多的低级访问权限,因此它本身就是Web服务器。您不能将两个应用程序绑定到一个端口,因此它已经无法共享。 有一些服务(Web服务器)允许您创建代理以将流量路由到您的Node.js进程,但在某些情况下效率不高,并且共享托管不提供此类功能。 由于Node.js仍然相当年轻,而且有所不同,它还没有占据大多数共享托管服务。有一些在线服务可用于以“共享”方式托管您的Node.js应用程序。 此外,您可以在AWS上免费租用EC2微实例(免费层),为期一年,这为您提供了大量的可能性和时间来尝试和测试不同的东西。您将获得半专用系统,可以做几乎任何事情(安装软件、修改操作系统配置等),共享托管不允许您这样做。

14
这个答案是错误的。你可以在Nginx和Apache上运行Node.js。事实上,这两个服务器经常用于反向代理到Node应用程序。例如,请参阅使用nginx与node的文章(在此处)。PHP在共享托管中更为普遍的原因是它已经存在更长时间。Node发布于2009年,而PHP自1995年以来就已经存在了。在这段时间里,主机有时间实现支持,并且没有太多理由支持其他语言。 - slang
7
你好 @slang800。你没有理解这个问题的重点。 而重点是:共享主机+Node.js。 所谓“共享主机”是指像godaddy等传统的共享主机。它们不允许您在共享空间上安装任何软件堆栈-他们只提供现成的解决方案。 为什么会这样的解释就在上面。虽然你说的是不同的故事,实际上共享主机平台已经将node.js作为其产品列表的一部分,并且可以提供服务。但还有很长的路要走。这与代理没有任何关系。完全是不同的故事。 - moka
我并不是说 Node.js 可以在共享主机上运行,显然现在这是不可能的。我是指答案中的解释(无法在 Nginx 或 Apache 下运行)是错误的,因为它确实可以。Node.js 并非从根本上不能在共享环境中使用,原因不是因为它“创建了自己的套接字”。只是因为它还比较年轻,尚未被设置为在共享托管环境中运行。 - slang
事实上,它不能作为nginx或apache提供的解决方案的“一部分”运行。以PHP为例,它是一种脚本语言,与解决方案一起使用时,php-fpm是单独的进程,并使用套接字与nginx通信。但是,php-fpm本身没有太多作用,没有nginx就不能完成同样的工作,因为它没有实现http服务器和所有与web相关的技术栈。而当node.js这样做时,它是完全独立的解决方案。当然,您可以从nginx代理到node.js - 这就是我个人所做的。但是,这里讨论的是共享主机。 - moka
事实上,答案中提到了代理。现在我已经进行了更正,以反映更近期的情况。 - moka
FYI,亚马逊声称免费的AWS EC2并不完全免费。我在6个月前开始使用它,在第二个月,他们就开始收取大约2美元的维护费用(未来几个月会增加)。然而,费用很小,但请务必密切关注您的账单仪表板。 - JD-V

12

12

了解一下Heroku。对于简单低流量的应用程序,它们是免费的,并且可以轻松地为更多流量进行扩展(需要额外费用)。此外,您可以使用Git进行部署,因此更新内容非常简单...


5

其他优秀的Node应用托管选项包括Joyent的SmartOS和Microsoft Azure。两者都有免费试用期。

Azure可以成为Node.js的学习平台,因为您可以在Windows Server、Ubuntu Linux或Azure的特殊“网站”共享部署方案中托管您的Node应用。

http://www.windowsazure.com/en-us/develop/nodejs/tutorials/create-a-website-(mac)/

另一种成本效益的节点应用托管解决方案是Azure的“网站”方法,每月约10美元。缺点是您必须使用他们的共享环境通过IIS托管您的节点应用程序。实际上,这对我很有效,但是您的局限性在于当它在Windows上运行时,您无法使用某些来自Node的Linux功能,并且您将不会学习如何自己配置节点服务,这可能或可能不重要。 (请注意:如果您想从本地GIT存储库部署应用程序,则Azure的GIT部署过程非常好。还请注意,当您的应用程序在一定时间内未使用时,NodeIIS将停止您的节点应用程序 - 当请求您的应用程序时,它会自动重新启动。)
Joyent的SmartOS平台是针对托管您的node.js应用程序进行优化的Linux操作系统。他们具有令人印象深刻的可靠性和性能以及出色的诊断工具。

http://wiki.joyent.com/wiki/display/jpc2/Developing+a+Node.js+Application

目前我发现最经济实惠的解决方案是DigitalOcean,这是一个非常优秀的新托管解决方案,您可以仅需每月5美元,就能托管完整的Linux VM!到目前为止,我在那里托管Node应用程序运行良好。https://www.digitalocean.com/pricing

5

a2hosting允许在共享主机中使用Node.js。但我没有在那里的经验。从网上搜索得知。

更新:使用DigitalOcean。私人VPS。


2
非常积极的体验。请参考以下说明,使用Apache作为反向代理来安装node: https://www.a2hosting.com/kb/installable-applications/manual-installations/installing-node-js-on-managed-hosting-accounts - aap
理论上是可以的,但在A2共享主机上无法降级到root用户,而我需要这个权限来进行安装,所以我放弃了A2。 - Elliot Robert
1
不需要 root 访问权限,A2 Hosting 可以与 node.js 兼容。结果是,即使在他们每月约 4 美元的共享托管帐户上,您也可以让 node.js 正常工作。请参阅上面链接的他们知识库文章。顺便说一句,他们描述的方法也可能适用于其他托管帐户。 - aap

4

Node不像大多数服务器那样工作。使用IIS和Apache,有一个运行多个站点的服务器,这适用于共享环境。但是使用Node,您正在运行自己的服务器,因此通常会在一台机器上共享资源。

我无法告诉您学习Node是否值得,因为我不知道您的动机,但如果您选择学习它,它可以扩展您的职业机会并扩展您的技能组合。

以下是几个低价位的托管选项。

http://nodester.com/

https://www.nodejitsu.com/


Node 可以与 IIS 协同工作 -> http://www.hanselman.com/blog/InstallingAndRunningNodejsApplicationsWithinIISOnWindowsAreYouMad.aspx - Idrees Khan
7
截至2015年3月,nodester已经停止运营,nodejitsu已被收购并整合到GoDaddy公司中,不再提供node PaaS服务。 - SW4
我使用Node.js是因为我不需要学习一门新语言,我已经熟悉它了。 - zachdyer

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