node-http-proxyというのはnode.jsでhttpプロクシを作るためのライブラリです。 WebSocketsに対応しているリバースプロクシが作れるということで注目していました。
さて、気づいたら、いつの間にかバージョンアップしていました。
http://blog.nodejitsu.com/node-http-proxy-1dot0/
node-0.10用に書き直してv1.0になったということです。 ところが、以前のバージョンで使えていたProxyTableは使えなくなっていて、 userlandでコーディングしてねということでした。 以前のバージョンではほとんどコーディングしなくても使えるようになっていて それはそれでよかったのですが、v1.0ではシンプルなAPIとなっていて 基本的にコーディングして使うモジュールという位置づけになっています。 個人的にはv1.0の方が好みです。
ProxyTableはないけれど簡単できるよ、というサンプルが上記ブログに乗っていて、 ホスト名で振り分ける例が載っています。 ただ、前のProxyTableはパスでも振り分けられたのです。 完全互換というわけではありませんが、パスで振り分けるサンプルを紹介します。 ついでに、WebSocketsもHTTPSもどんな組み合わせでも大丈夫なように。
というわけで、コードです。
var fs = require('fs');
var http = require('http');
var https = require('https');
var httpProxy = require('http-proxy');
var proxyTable = {
"/path1/": "http://localhost:1234/",
"/path2/": "http://localhost:2345/",
"/sslpath3/": "https://localhost:3456/",
"/sslpath4/": "https://localhost:4567/"
};
var sslOptions = {
key: fs.readFileSync('key.pem', 'utf8'),
cert: fs.readFileSync('cert.pem', 'utf8')
};
var proxy = httpProxy.createProxyServer();
function makeHandler(type) {
return function(req, res, head) {
for (path in proxyTable) {
if (req.url.lastIndexOf(path, 0) === 0) {
if (type === 'web') {
proxy.web(req, res, {
target: proxyTable[path]
})
} else if (type === 'ws') {
proxy.ws(req, res, head, {
target: proxyTable[path]
})
} else {
res.writeHead(500);
res.end();
}
return;
}
}
res.writeHead(404);
res.end();
};
}
var proxyServer = http.createServer(makeHandler('web'));
proxyServer.on('upgrade', makeHandler('ws'));
proxyServer.listen(80);
var sslProxyServer = https.createServer(sslOptions, makeHandler('web'));
sslProxyServer.on('upgrade', makeHandler('ws'));
sslProxyServer.listen(443);
いかがでしょう?
コメント