Non ho mai capito Haibu o Cluster. Ma ho trovato una buona soluzione che ha affrontato il mio problema. Con mia sorpresa, era in realtà abbastanza semplice. Tuttavia, non ne so molto dei server, quindi mentre funziona, potrebbe non essere ottimale.
ho impostare gli host virtuali come normale su Apache (http://httpd.apache.org/docs/2.0/vhosts/examples.html)
ho installato il seguente sul nodo
- Express (http://expressjs.com/)
- nodo-http-proxy (https://github.com/nodejitsu/node-http-proxy)
Poi, per una questione di personale stile, ho messo tutto i miei host virtuali in una directory comune (/ localhost)
Ho quindi cambiato Apache per l'ascolto su una porta diversa dalla porta 80. Mi è capitato di scegliere la porta 9000 perché l'avevo vista utilizzata da qualche parte. (In httpd.conf, cambiato "Ascolta 80" in "Ascolta 9000"). Dovevo anche assicurarmi che tutti i miei host virtuali, come definiti in extra/httpd-vhosts.conf, fossero impostati su un nomeVirtualHost basato su IP (127.0.0.1) invece di usare una porta (*: 80).
Sul lato nodo, ho creato la mia app/server (aka nodo host virtuale) che ha ascoltato sulla porta 8000 (un po 'arbitrariamente scelta del numero di porta) Vedere questo link sulla creazione di un server con espresso: http://expressjs.com/guide.html
In Ho quindi creato un file chiamato "nodeHttpProxy.js"
Utilizzando node-http-proxy, in nodeHttpProxy.js ho quindi creato un server proxy che ascolta sulla porta 80. Utilizzando express, che esegue il wrapping connect (http : //www.senchalabs.org/connect/) Ho creato i miei host virtuali.
I nodeHttpProxy.js di file è simile al seguente:
// 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);
Come potete vedere, dovrò fare due cose ogni volta che creo un nuovo nodo host virtuale:
- aggiungere il nome host virtuale per i miei "nodeVhosts" Array
- definire un nuovo esprimere host virtuale utilizzando il metodo .set
Ovviamente, dovrò anche creare il percorso/i file host nella mia directory/localhost.
Una volta che tutto questo è fatto Ho solo bisogno di eseguire nodeHttpProxy.js:
node nodeHttpProxy.js
Si potrebbe ottenere qualche strano errore "eAccess", nel qual caso, basta eseguire come sudo.
Ascolta sulla porta 80 e se l'host corrisponde a uno dei nomi nell'array nodeVhosts inoltrerà la richiesta a quell'host sulla porta 8000, altrimenti inoltrerà la richiesta su quell'host sulla porta 9000.
convertito per la più recente sintassi espressa: https://gist.github.com/4135704 – sgb