Я так и не понял, Хайбу или Кластер.Но я нашел хорошее решение, которое решило мою проблему.К моему удивлению, это было на самом деле довольно просто.Однако я не очень разбираюсь в серверах, поэтому, хотя это работает, это может быть неоптимально.
Я настроил виртуальные хосты как обычные для Apache (http://httpd.apache.org/docs/2.0/vhosts/examples.html)
Я установил следующее на узле
) Затем, в качестве личного стиля, я разместил все свои виртуальные хостыв общем каталоге (/ localhost)
Затем я переключил Apache для прослушивания порта, отличного от порта 80. Я просто случайно выбрал порт 9000, потому что видел, что он где-то использовался (в httpd.conf изменился«Listen 80» для «Listen 9000»). Я также должен был убедиться, что все мои виртуальные хосты, как определено в extra / httpd-vhosts.conf, были установлены на основе имени IPVirtualHost (127.0.0.1) вместо использования порта(*: 80).
На стороне узла я создал мое приложение / сервер (он же виртуальный хост узла), который прослушивал порт 8000 (несколько произвольно выбирая номер порта). См. Эту ссылку при создании сервера сЭкспресс: http://expressjs.com/guide.html
В моем / localhost Directory Затем я создал файл с именем "nodeHttpProxy.js"
Используя node-http-proxy, в nodeHttpProxy.js Затем я создал прокси-сервер, который прослушивает порт 80. Используя express, который связывает соединение (http://www.senchalabs.org/connect/) Я создал свои виртуальные хосты.
Файл 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
Конечно, мне также придетсясоздайте фактический путь / файлы хоста в моей директории / localhost.
Как только все это будет сделано, мне просто нужно запустить nodeHttpProxy.js:
node nodeHttpProxy.js
Вы можете получить какой-то странный "EACCESS"ошибка, в этом случае просто запустите от имени sudo.
Он будет прослушивать порт 80, и если хост соответствует одному из имен в массиве nodeVhosts, он перенаправит запрос этому хосту на порт 8000, в противном случаеон перенаправит запрос на этот хост через порт 9000.