我从来没有想过Haibu或Cluster。但是我确实找到了解决我问题的好的解决方案。令我惊讶的是,这实际上非常简单。但是,我对服务器了解不多,因此虽然可行,但这可能不是最佳选择。
我在Apache上像往常一样设置了虚拟主机(http://httpd.apache.org/docs/2.0/vhosts/examples.html)
我在Node上安装了以下内容
- Express(http://expressjs.com/)
- node-http-proxy(https://github.com/nodejitsu/node-http-proxy)
然后,出于个人风格,我将所有虚拟主机都放在一个公共目录(/ localhost)中
然后,我切换了Apache以侦听端口80以外的其他端口。我刚巧选择了端口9000,因为我看到它在某个地方使用过。(在httpd.conf中,将“
Listen 80”更改为“ Listen 9000”)。我还必须确保将我在Extra / httpd-
vhosts.conf中定义的所有虚拟主机都设置为基于IP的名称VirtualHost(127.0.0.1),而不是使用端口(*:80)。
- 在“节点”端,我创建了我的应用程序/服务器(也称为节点虚拟主机),该应用程序/服务器在端口8000上侦听(以某种方式任意选择端口号),请参见以下使用Express创建服务器的链接:http
- //expressjs.com/guide。 html
然后,在我的/ localhost目录中,创建了一个名为“ nodeHttpProxy.js”的文件。
然后,在nodeHttpProxy.js中,使用node-http-
proxy创建了一个侦听端口80的代理服务器。使用express来包装连接(http://www.senchalabs.org/connect/),创建了虚拟主机。
nodeHttpProxy.js文件如下所示:
// Module dependanciesvar httpProxy = require('/usr/local/lib/node_modules/http-proxy/lib/node-http-proxy'), express = require('/usr/local/lib/node_modules/express/lib/express');// Http proxy-serverhttpProxy.createServer(function (req, res, proxy) { // Array of node host names var nodeVhosts = [ 'vhost1' , 'vhost2' ] , host = req.header('host') , port = nodeVhosts.indexOf(host) > -1 ? 8000 : 9000; // Now proxy the request proxy.proxyRequest(req, res, { host: host , port: port });}).listen(80);// Vhosts serverexpress.createServer().use(express.vhost('vhost1', require('./vhost1/app'))).use(express.vhost('vhost2', require('./vhost2/app'))).app.listen(8000);如您所见,每次创建新的Node虚拟主机时,我都必须做两件事:
- 将虚拟主机名添加到我的“ nodeVhosts”数组中
- 使用.set方法定义新的快速虚拟主机
当然,我还必须在/ localhost目录中创建实际的主机路径/文件。
一旦完成所有这些,我只需要运行nodeHttpProxy.js:
node nodeHttpProxy.js
您可能会收到一些奇怪的“ EACCESS”错误,在这种情况下,只需以sudo身份运行即可。
它将侦听端口80,并且如果主机与nodeVhosts数组中的名称之一匹配,它将把请求转发到端口8000上的该主机,否则它将请求转发到该端口9000上的主机。



