900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Nodejs实现一个http反向代理

Nodejs实现一个http反向代理

时间:2021-11-27 15:39:08

相关推荐

Nodejs实现一个http反向代理

独角兽企业重金招聘Python工程师标准>>>

使用Nodejs很容易实现一个反向代理。基本思路是使用node-static查看文件是否存在本地,存在则直接返回,如果不存在则将请求转发到相应的后端服务器,dns模块对本地hosts文件内配置的域名解析会出现问题,因此使用了硬编码的hosts配置。需要npm安装模块:node-static、request。

代码如下:

varnodeStatic=require('node-static').Server;varrequest=require("request");vardns=require("dns");varfileServer=newnodeStatic("./");varhttp=require("http");varport=8088;varhosts={'kind':'192.168.72.11','free':'192.168.72.29','cute':'192.168.72.34'}varresolv=function(hostname,callback){if(/^[\d\.]+$/.test(hostname))callback(hostname);else{if(hosts[hostname])callback(hosts[hostname]);else{dns.resolve4(hostname,function(err,addresses){if(err){console.error(err);callback(null);}elsecallback(addresses[0]);});}}}varhttpServer=http.createServer(function(req,res){req.addListener('end',function(){fileServer.serve(req,res,function(err,result){if(err&&(err.status===404)){varhoststr=req.headers.host.split(':');varhostname=hoststr[0];resolv(hostname,function(ip){if(!ip){res.writeHeader(200,'text/html');res.write(req.url);res.end('requestfailuer.');}else{if(hoststr.length>1)ip+=(':'+hoststr[1])varp='http://'+ip+req.url;req.headers['Host']=req.headers.host;request({method:req.method,url:p,headers:req.headers}).pipe(res);}});}});}).resume();});httpServer.listen(port);console.log('proxylistenin'+port);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。