HaibuもClusterもわからなかった。しかし、私の問題に対処する良い解決策を見つけました。驚いたことに、実際には非常に簡単でした。ただし、サーバーについてはよく知らないので、これは機能しますが、最適ではない可能性があります。
Apache で通常のように仮想ホストをセットアップしました (http://httpd.apache.org/docs/2.0/vhosts/examples.html)
Nodeに以下をインストールしました
- エクスプレス (http://expressjs.com/)
- node-http-proxy (https://github.com/nodejitsu/node-http-proxy)
次に、個人的なスタイルの問題として、すべての仮想ホストを共通のディレクトリ (/localhost) に配置しました。
次に、ポート 80 以外のポートでリッスンするように Apache を切り替えました。たまたまポート 9000 を選択したのは、それがどこかで使用されているのを見たからです。(httpd.conf で、"Listen 80" を "Listen 9000" に変更)。また、extra/httpd-vhosts.conf で定義されているすべての仮想ホストが、ポート (*:80) を使用する代わりに、IP ベースの nameVirtualHost (127.0.0.1) に設定されていることを確認する必要がありました。
ノード側では、ポート 8000 でリッスンするアプリ/サーバー (別名ノード仮想ホスト) を作成しました (ポート番号の任意の選択) 。 html
/localhost ディレクトリに、「nodeHttpProxy.js」というファイルを作成しました。
次に、nodeHttpProxy.js で node-http-proxy を使用して、ポート 80 でリッスンするプロキシ サーバーを作成しました。connect (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 仮想ホストを作成するたびに、次の 2 つのことを行う必要があります。
- 仮想ホスト名を「nodeVhosts」配列に追加します
- .set メソッドを使用して新しい高速仮想ホストを定義する
もちろん、/localhost ディレクトリに実際のホスト パス/ファイルを作成する必要もあります。
これがすべて完了したら、nodeHttpProxy.js を実行するだけです。
node nodeHttpProxy.js
奇妙な「EACCESS」エラーが発生する場合があります。その場合は、sudo として実行してください。
ポート 80 でリッスンし、ホストが nodeVhosts 配列内の名前の 1 つと一致する場合は、ポート 8000 でそのホストにリクエストを転送します。それ以外の場合は、ポート 9000 でそのホストにリクエストを転送します。