我从来没有弄清楚 Haibu 或 Cluster。但我确实找到了一个很好的解决方案来解决我的问题。令我惊讶的是,它实际上非常简单。但是,我对服务器知之甚少,所以虽然这可行,但它可能不是最佳的。
我在 Apache 上设置了正常的虚拟主机(http://httpd.apache.org/docs/2.0/vhosts/examples.html)
我在节点上安装了以下
- 快递 (http://expressjs.com/)
- 节点-http-proxy (https://github.com/nodejitsu/node-http-proxy)
然后,作为个人风格,我将所有虚拟主机放在一个公共目录(/localhost)中
然后,我将 Apache 切换到侦听端口 80 以外的端口。我只是碰巧选择了端口 9000,因为我曾看到它在某处使用过。(在 httpd.conf 中,将“Listen 80”更改为“Listen 9000”)。我还必须确保我的所有虚拟主机(在 extra/httpd-vhosts.conf 中定义)都设置为基于 IP 的 nameVirtualHost (127.0.0.1) 而不是使用端口 (*:80)。
在节点方面,我创建了我的应用程序/服务器(又名节点虚拟主机),它在端口 8000 上侦听(端口号的任意选择)请参阅此链接以使用 express 创建服务器: http: //expressjs.com/guide。 html
然后在我的 /localhost 目录中创建了一个名为“nodeHttpProxy.js”的文件
使用 node-http-proxy,在 nodeHttpProxy.js 中,我创建了一个代理服务器,侦听端口 80。使用包含连接 (http://www.senchalabs.org/connect/) 的 express,我创建了我的虚拟主机。
nodeHttpProxy.js 文件如下所示:
// Module dependancies
var 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-server
httpProxy.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 server
express.createServer()
.use(express.vhost('vhost1', require('./vhost1/app')))
.use(express.vhost('vhost2', require('./vhost2/app')))
.app.listen(8000);
如您所见,每次创建新的 Node 虚拟主机时,我都必须做两件事:
- 将虚拟主机名添加到我的“nodeVhosts”数组中
- 使用 .set 方法定义一个新的 express 虚拟主机
当然,我还必须在我的 /localhost 目录中创建实际的主机路径/文件。
完成所有这些后,我只需要运行 nodeHttpProxy.js:
node nodeHttpProxy.js
您可能会收到一些奇怪的“EACCESS”错误,在这种情况下,只需以 sudo 身份运行。
它将侦听端口 80,如果主机匹配 nodeVhosts 数组中的名称之一,它将请求转发到端口 8000 上的该主机,否则它将转发请求到端口 9000 上的该主机。