为啥 node.js 不能在共享主机上运行? [关闭]

Posted

技术标签:

【中文标题】为啥 node.js 不能在共享主机上运行? [关闭]【英文标题】:Why node.js can't run on shared hosting? [closed]为什么 node.js 不能在共享主机上运行? [关闭] 【发布时间】:2013-07-05 23:03:54 【问题描述】:

第一件事:我搜索了所有已知的网络托管公司以寻找 nodejs 的共享托管,但我没有找到任何人。然后我才知道 nodejs 不能在共享主机系统上运行。我想知道为什么?

第二件事:我是一个正常预算的人。选择 vps 或专用服务器或云托管使节点运行,但与 php 共享托管服务相比,它超出了我的零用钱范围,所以我应该学习 node.js 吗?

【问题讨论】:

Gandi 提供 - wiki.gandi.net/en/simple/instance/nodejs 和 gandi.net/hosting/simple?language=nodejs&db=mysql 是的,可以!见我的answer。 试试这个解决方案medium.com/p/52e12a62a259/responses/show 【参考方案1】:

理论上可以,但实际上它取决于托管服务提供商是否有这样的基础设施。

与经典网络平台相比,节点是自我可持续的平台。如果使用 PHP(例如),它可以在 apache 或 nginx(或任何其他)上运行,而 PHP 它本身只是带有一些库的脚本语言,这些库在逻辑实现方面没有太多作用,并且需要 Web 服务器解决方案。 Web 服务器创建套接字来侦听特定端口的流量,会发挥自己的魔力并执行 PHP 来处理请求。

同时 node.js 创建自己的套接字,并将其绑定到自己的端口。这给了它更多的低级访问权限,所以它本身就是 Web 服务器。您不能将两个应用程序绑定到一个端口,因此它已经无法共享。 有一些服务(Web 服务器)允许您创建代理以将流量路由到您的 node.js 进程,但在某些情况下效率不高,并且共享主机不提供此类功能。

由于 node.js 还很年轻,而且很好,不同的是,它仍然没有影响到大多数共享托管服务。有一些可用的在线服务以“共享”方式托管您的 node.js 应用程序。

此外,您还可以在 AWS 上免费租用 EC2 Micro 实例(免费套餐)一年,这为您提供了充足的可能性和时间来尝试和测试不同的东西。您将获得半专用系统,您可以在其中做几乎任何事情(安装软件、修改操作系统配置等等),而共享主机不允许您这样做。

【讨论】:

这个答案是错误的。您可以在 Nginx 和 Apache 之上运行 Node.js。事实上,这两个服务器都经常用于反向代理 Node 应用程序。例如,请参阅有关将 nginx 与节点 here 结合使用的文章。 PHP 在共享主机上更常见的原因是它存在的时间更长。 Node 于 2009 年发布,PHP 从 1995 年就已经存在。在这段时间里,主机有时间实现支持,并且没有太多理由去支持其他语言。 你好@slang800。你在这里错过了问题的重点。重点是:共享主机 + Node.js。 “共享主机”是指 - 任何经典的共享主机,如 godaddy 等。它们不允许您在共享空间上安装任何软件堆栈 - 它们只提供现成的解决方案。为什么会这样的解释就在上面。虽然您所说的是不同的故事,但实际上共享托管平台已经将 node.js 作为他们可以提供服务的产品列表的一部分。但还有很长的路要走。与这里的代理无关。完全不同的故事。 我并不是说 Node.js 可以在共享主机上运行,​​现在显然不是这样。我是说答案中的解释(它不能在 Nginx 或 Apache 下运行)是错误的,因为它可以。 Node.js 并不是因为“创建 [它的] 自己的套接字”之类的原因而根本无法在共享环境中使用。它只是尚未设置为在共享托管环境中工作,因为它还很年轻。 其实它不能作为nginx或apache提供的解决方案的part运行。作为示例检查 PHP - 全部是 - 脚本语言和解决方案,实际上 php-fpm 是单独的进程并使用套接字与 nginx 通信。但是 php-fpm 如果没有 nginx,它本身并没有做太多事情。它最初是为了配合使用而设计的。如果没有 nginx,它就无法完成同样的工作,因为它没有实现 http 服务器和所有与 web 相关的技术栈。当 node.js 这样做时,并且是完全独立的解决方案。当然,您可以从 nginx 代理到节点——这就是我个人所做的。但这里讨论的是共享托管。 事实上的回答确实提到了代理。现在我已经更正了它以反映最近的情况。【参考方案2】:

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

【讨论】:

【参考方案3】:

还有其他部署 node.js 应用程序的方法。

您可以使用 PaaS 服务,例如Openshift、Heroku、AppFog、Paastor、dotCloud 等。

【讨论】:

【参考方案4】:

其他出色的节点应用托管选项包括 Joyent 的 SmartOS 和 Microsoft Azure。两者都有免费试用期。

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

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

另一个成本有效的节点应用托管解决方案是 Azure 的“网站”方法 - 每月大约 10 美元。不利的一面是,您必须使用他们通过 IIS 托管您的节点应用程序的共享环境。实际上,这对我来说效果很好,但是您受到限制,因为当 Node 在 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,这是一个很棒的新托管解决方案,您可以在其中托管完整的 Linux 虚拟机,每月只需 5 美元!到目前为止,我很幸运地在那里托管了 Node 应用程序:https://www.digitalocean.com/pricing

【讨论】:

【参考方案5】:

a2hosting 允许 Node.js 共享托管。但没有经验。从网络搜索中找到

更新:使用 DigitalOcean。私人VPS

【讨论】:

非常积极的体验。请参阅他们使用 Apache 作为反向代理安装节点的说明:a2hosting.com/kb/installable-applications/manual-installations/… 理论上他们会这样做,但你不能在 A2 上的共享主机中进入 root,在我的情况下需要安装它,所以我放弃了 a2。 没有。 A2 Hosting 与 node.js 一起工作,无需 root 访问。最终结果:您甚至可以在他们每月约 4 美元的共享主机帐户上运行 node.js。请参阅上面的链接到他们的知识库文章。顺便说一句,他们描述的方法可能也适用于其他托管帐户。【参考方案6】:

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

我不能告诉你是否值得学习节点,因为我不知道你的动机,但如果你选择去那里,它可以扩展你的职业机会,并扩展你的技能。

这里有几个低价的托管选项。

http://nodester.com/

https://www.nodejitsu.com/

【讨论】:

Node 可与 IIS 配合使用 -> hanselman.com/blog/… 截至 2015 年 3 月,nodester 未解决,nodejitsu 已折叠到 GoDaddy 中,不再提供 node PaaS 我使用 nodejs 是因为我不必学习我已经知道的新语言。

以上是关于为啥 node.js 不能在共享主机上运行? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在共享主机中托管 Node.Js 应用程序 [关闭]

为啥 Node.js 是单线程的? [关闭]

为啥 Node.js 是单线程的? [关闭]

为啥在端口 80 上运行 node.js 可能不安全?

在 Webfaction 上设置 Node.js

通过nodejs在共享cpanel主机上实现websocket服务器