Nodejs实现一个http反向代理
2014-07-04 20:06
543 查看
使用Nodejs很容易实现一个反向代理。基本思路是使用node-static查看文件是否存在本地,存在则直接返回,如果不存在则将请求转发到相应的后端服务器,dns模块对本地hosts文件内配置的域名解析会出现问题,因此使用了硬编码的hosts配置。需要npm安装模块:node-static、request。
代码如下:
代码如下:
var nodeStatic = require('node-static').Server; var request = require("request"); var dns = require("dns"); var fileServer = new nodeStatic("./"); var http = require("http"); var port = 8088; var hosts = { 'kind':'192.168.72.11', 'free':'192.168.72.29', 'cute':'192.168.72.34' } var resolv = 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); }else callback(addresses[0]); }); } } } var httpServer = http.createServer(function(req, res) { req.addListener('end', function() { fileServer.serve(req, res, function(err, result) { if (err && (err.status === 404)) { var hoststr = req.headers.host.split(':'); var hostname = hoststr[0]; resolv(hostname,function(ip){ if(!ip){ res.writeHeader(200,'text/html'); res.write(req.url); res.end(' request failuer.'); }else{ if(hoststr.length > 1)ip += (':'+hoststr[1]) var p = '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('proxy listen in '+port);
相关文章推荐
- [乐意黎原创] 通过Apache反向代理实现多个http/https访问NodeJS服务
- nodejs实现一个简单的 HTTP静态文件服务器(一)
- nodejs入门学习笔记一——一个完整的http路由服务实现
- 一个轻量级的纯Java Http服务器的实现---Java SE 6 新特性: HTTP 增强
- Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器
- 发现一个好的javascript网站(http://www.softcomplex.com/products/tigra_menu/demo/steps/)有关于用JAVASCRIPT实现下拉菜单。
- Android 实现一个http 带参数登录
- 一个下载SVN源码+http协议的java实现
- Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器
- 用C语言实现一个简单的HTTP客户端
- 【IOS】利用ASIHTTPRequest 实现一个简单的登陆验证
- --------------------9 以上介绍了一个最简单的http交互的java实现----------------------------------
- 用C语言实现一个简单的HTTP客户端(HTTP Client)
- 用C语言实现一个简单的HTTP客户端(HTTP Client)
- [Visaul C#] 自己实现的一个HttpContextHelper有多处方法,可实现强大的HTTP请求处理
- Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器
- 用C语言实现一个简单的HTTP客户端(HTTP Client)
- 发一个多线程通过 HTTP 下载文件的类(Linux下的实现)
- Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器
- 利用ASIHTTPRequest 实现一个简单的登陆验证