node插件http-proxy實現(xiàn)反向代理
npm init一個新的項目茫虽,安裝http-proxy插件用來反向代理舰讹,這個服務(wù)占用80接口躬审,然后我把之前小程序占用的80接口予弧,改為了3000接口。
var http = require('http'), httpProxy = require('http-proxy');
// 新建一個代理 Proxy Server 對象
var proxy = httpProxy.createProxyServer({});
// 捕獲異常
proxy.on('error', function (err, req, res) {
res.writeHead(500, {
'Content-Type': 'text/plain'
});
res.end('Something went wrong. And we are reporting a custom error message.');
});
// 在每次請求中槐秧,調(diào)用 proxy.web(req, res config) 方法進行請求分發(fā)
var server = require('http').createServer(function(req, res) {
// 在這里可以自定義你的路由分發(fā)
var host = req.headers.host, ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
console.log("client ip:" + ip + ", host:" + host);
switch(host){
case 'www.111.cn':
proxy.web(req, res, { target: 'http://localhost:3000' });
break;
case 'vote.111.cn':
proxy.web(req, res, { target: 'http://localhost:9527' });
break;
default:
res.writeHead(200, {
'Content-Type': 'text/plain'
});
res.end('Welcome to my server!');
}
});
console.log("listening on port 80")
server.listen(80);
如代碼所示啄踊,當訪問www.111.cn的時候,請求就被轉(zhuǎn)發(fā)到了3000接口上刁标,訪問vote.111.cn時就被轉(zhuǎn)發(fā)到了9527這個接口上颠通,自己當時很困惑的是怎么在小程序的80接口上去做轉(zhuǎn)發(fā),其實80是個獨立的服務(wù)膀懈,只做轉(zhuǎn)發(fā)這個一件事情顿锰,別的服務(wù)都要放到別的端口上去的。
用node做服務(wù)器的話启搂,推薦大家用pm2來做管理硼控,這樣可以把一臺服務(wù)器上的所有服務(wù)都監(jiān)管起來,利于開發(fā)調(diào)試狐血。
反向代理:
我所理解的意思是,正常情況下
域名對應(yīng)的 ip 是主動去監(jiān)測 80端口.
但是我們的項目中用到了很多端口,因此需要代理轉(zhuǎn)去其他端口,
在node 中 我們可以使用 http-proxy 進行端口的轉(zhuǎn)發(fā)工作,
如上面的代碼,我們根據(jù) HOST 進行端口號的轉(zhuǎn)發(fā)監(jiān)測!
反向代理淀歇,說白了就是完成端口的分發(fā)