并行运行Node.js和apache的技术方面

时间:2013-05-21 16:34:32

标签: php apache node.js port

今天早些时候,我在程序员StackExchange上提出了一个问题:Is it bad practice to run Node.js and apache in parallel?

我的最终应用程序可以被视为一个社交网络,我希望在其中拥有聊天功能和正常的状态更新功能。

对于聊天功能,我想使用Node.js,因为我想将数据从服务器推送到客户端,而不是经常轮询服务器。对于状态更新,我想要一个普通的apache和PHP安装,因为我对此更熟悉,并且不明白为什么我会使用Node.js。

然而,这意味着我必须并行运行Node.js和apache。虽然根据Programmers.SE的答案,这是可能的并且不被认为是不好的做法,但我确实看到了一些技术问题:

  • 我需要打开两个端口 - 可能会打开没有打开所有端口的开放网络的问题

  • 我无法使用我的共享服务器,因为我不允许在那里打开端口,因此我必须购买VPS

我不太关心第二个,更关心第一个。那么真的没有解决方案将两个功能组合在一个端口上吗?

或者端口有一些解决方法吗?例如,我可以将subdomain.domain.com:80重定向到domain.com:x,其中x是Node.js的端口吗?这可能并解决我的问题吗?这个解决方案是在this Programmers.SE answer中给出的,但是我该如何实现呢?

2 个答案:

答案 0 :(得分:3)

你可以通过Apache代理对node.js的所有请求(使用mod_proxy),这样你就不会有多个开放端口的麻烦。这也允许将所有内容重新映射到子文件夹或子域。

这在性能方面不是最好的解决方案,但如果你在共享的网络空间,它并不重要。 (共享服务器通常很慢,如果你获得更大的用户群,你需要迟早转移到单独的服务器。)

答案 1 :(得分:2)

正如@TheHippo所说,你可以用Apache的mod_proxy做到这一点。

然而,

nGinx可能会更快,特别是如果您使用FastCGI运行PHP> = 5.4。 nGinx也是比apache更好的转发代理,它的基于事件的模型符合Node的基于事件的I / O.使用propper设置可能意味着更好的整体性能。

如果您处于受限制的环境中(例如共享服务器或无法更改网络服务器),那么您应该使用Apache和mod_proxy。