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


Technical aspects of running Node.js and apache in parallel

今天早些时候,我在程序员StackExchange上问了一个问题:并行运行Node.js和apache是不好的做法吗?

我的最终应用程序可以被认为是一个社交网络,我想有一个聊天功能和一个正常的状态更新功能。

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

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

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

  • 我不能使用我的共享服务器,因为我不允许在那里打开端口,所以我必须买一个VPS

我不太关心第二个,我更关心第一个。那么,是否真的没有办法在一个移植上结合这两个功能?

或者有一些解决方案的端口?例如,我可以将subdomain.domain.com:80重定向到domain.com:x,其中x是Node.js的端口吗?这样可以解决我的问题吗?该方案已在《程序员》中给出。答案是SE,但我该如何实现它呢?

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

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

正如@TheHippo所说,您可以使用Apache的mod_proxy来完成此操作。

然而,nGinx可能会更快,特别是如果你运行PHP>= 5.4与FastCGI。nGinx也是一个比apache更好的转发代理,它基于事件的模型与Node基于事件的I/O是一致的。通过适当的设置,这可能意味着更好的整体性能。

如果你在一个受限制的环境中(如共享服务器或无法更改web服务器),那么你应该使用Apache和mod_proxy。