用NodeJS 做反向代理服務器
場景:
一臺機器,一個80端口,多個web應用,怎樣複用80端口呢?
反向代理:
NodeJS做反向代理80端口,根據 HTTP head 判斷不同的服務類型,進行轉發。
例如:baidu.com 域名請求在端口82,yahoo.com 域名請求在端口83, tianya.com 域名在端口84
軟件包:
npm install http-proxy
代碼部分:
新建proxy.js 文件:
var http = require('http'), httpProxy=require('http-proxy');
var proxy = httpProxy.createProxyServer( { } );
proxy.on('error', function(err, req, res) {
res.writeHead(500, {
'Content-Type':'text/plain'
} );
res.end('server error ');
} );
var server = require('http').createServer(function(req, res){
var host = req.headers.host;
var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
switch(host){
case 'baidu.com':
proxy.web(req, res, {target: 'http://localhost:82'});
break;
case 'yahoo.com':
proxy.web(req, res, { target: 'http://localhost:83'} );
break;
case 'tianya.com':
proxy.web(req, res, { target: 'http://localhost:84'});
break;
default:
res.writeHead(302, {'Content-Type':'text/plain' });
res.end("重定向錯誤!");
}
});
console.log("listening on port 80!");
server.listen(80);