Nunca me di cuenta de Haibu o Clúster. Pero encontré una buena solución que abordó mi problema. Para mi sorpresa, en realidad fue bastante simple. Sin embargo, no sé mucho sobre los servidores, así que mientras esto funcione, puede que no sea óptimo.
que configure los equipos virtuales como normales en Apache (http://httpd.apache.org/docs/2.0/vhosts/examples.html)
He instalado el siguiente en el nodo
- Express (http://expressjs.com/)
- nodo-http-proxy (https://github.com/nodejitsu/node-http-proxy)
Entonces, como una cuestión de personal estilo, puse todo mis servidores virtuales en un directorio común (/ localhost)
Luego cambié Apache para escuchar en un puerto que no sea el puerto 80. Simplemente escogí el puerto 9000 porque lo había visto en alguna parte. (En httpd.conf, cambió "Listen 80" a "Listen 9000"). También tuve que asegurarme de que todos mis hosts virtuales, como se define en extra/httpd-vhosts.conf, se configuraron en un nombre basado en IPVirtualHost (127.0.0.1) en lugar de usar un puerto (*: 80).
En el lado de nodo, creé mi aplicación/servidor (también conocido como nodo de host virtual) que se escuchó en el puerto 8000 (algo arbitrariamente elección del número de puerto) Ver este enlace en la creación de un servidor con expreso: http://expressjs.com/guide.html
En mi directorio/localhost Luego creé un archivo llamado "nodeHttpProxy.js"
Utilizando node-http-proxy, en nodeHttpProxy.js Luego creé un servidor proxy que escucha en el puerto 80. Usando express, que se ajusta connect (http : //www.senchalabs.org/connect/) Creé mis servidores virtuales.
Los nodeHttpProxy.js archivo es como sigue:
// 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);
Como se puede ver, voy a tener que hacer dos cosas cada vez que crear un nuevo nodo de host virtual:
- añadir el nombre de host virtual para mis "nodeVhosts" matriz
- definir una nueva expresar máquina virtual usando el método .set
Por supuesto, también tendré que crear la ruta/archivos de host reales en mi directorio/localhost.
Una vez que todo esto se hace sólo necesito para funcionar nodeHttpProxy.js:
node nodeHttpProxy.js
Es posible obtener un error raro "EACCESS", en cuyo caso, basta con ejecutar como sudo.
Escuchará en el puerto 80, y si el host coincide con uno de los nombres en la matriz nodeVhosts reenviará la solicitud a ese host en el puerto 8000, de lo contrario enviará la solicitud a ese host en el puerto 9000.
convertido para la sintaxis expresa más nueva: https://gist.github.com/4135704 – sgb