nodejs之代理(一)

最先开始,是用wamp+thinkPHP框架搭的一个本地博客,后来,改用http://aspx.net实现了,再后来,改用nodejs实现.

而且,其他的个人项目不少.于是把所有的项目都放在了D:/WebSite/下面,nodejs的都共用一个package.json.

第一个个项目便是代理.老是输入IP很烦,只是改host好像没效果.有次看到了http-proxy模块,好像是核心库里的,不需要安装.

这很重要:Windows7系统,nodejs v 7.10.0proxy会占用80端口,然后它会将请求的代理网址分发给指定的其他端口.比如你本机访问novel.jiayou.com,你游览器看到的是本地novel.js项目的网站.

第一步:建文件夹 D:/WebSite/proxy.js.

第二步:新建index.js文件,代码如下(很简单的):

var http = require(http); var fs = require(fs); var proxy = require(http-proxy).createProxyServer({}); var config = {}, ip=localhost; var debug = require(debug)(proxy); (function(){ try{ var str = fs.readFileSync(C:/Windows/System32/drivers/etc/hosts); var reg = /[0-9.]+\s+([0-9a-zA-Z.]+)#(\d+)([^\d]*)[\n\r]+/g; var m; while((m=reg.exec(str))!==null){ config[m[1]] = m[2]; console.log(端口:+m[2] + \t域名:+m[1]); } } catch(err){ console.log(err.message); } })(); proxy.on(function (err, req, res) { res.writeHead(500, { Content-Type: text/plain }); }); proxy.on(error, function(err, req, res){ res.writeHead(500, { Content-Type: text/plain;charset=utf-8 }); res.end(new Buffer(代理服务器错误!)); }); // 另外新建一个 HTTP 80 端口的服务器,也就是常规 Node 创建 HTTP 服务器的方法。 // 在每次请求中,调用 proxy.web(req, res config) 方法进行请求分发 var server = http.createServer(function (req, res) { var host = req.headers.host; //,ip = req.headers[x-forwarded-for] || req.connection.remoteAddress; for(var k in config){ if(k===host){ //console.log(req.headers); proxy.web(req, res, { target: :+config[k]}); return; } } res.writeHead(200, { Content-Type: text/plain;charset=utf-8 }); res.end(Welcome to my server!); }); debug(代理服务器正在监听80端口!); server.listen(80);需要注意的是:代理哪个网址到哪个本地端口,都在C:/Windows/System32/drivers/etc/hosts 文件中

第三步:按格式改本机host文件, 本机IP----->代理网址----->紧跟#开头的注释

看一下我的

第四步:启动项目(在此之前需要全局安装一下nodemon,pm2是牛逼但我电脑上启动多个CPU要爆炸).之前我都是,打开cmd,进入文件夹,nodemon proxy.js启动的太麻烦.然后写了个windows的bat脚本放桌面,双击就可以了.

proxy.js.bat 代码如下 d: cd WebSite/proxy.js set DEBUG=proxy:*,proxy cls nodemon proxy.js pause

其中set是设置临时环境变量的,debug(内置的模块?express用的也是这个,不过临时环境变量是test)模块需要.

大功告成!