anyproxy代理服务器简要指南

项目地址是:https://github.com/alibaba/anyproxy

本文分4个阶段

(1) anyproxy的安装

(2)anyproxy的二次开发

(3)关于nodejs的一些知识点

anyproxy的安装,使用

安装系统环境 : centos6/7

nodejs的安装

更新nodejs的yum源

           curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -

安装nodejs

           yum install -y nodejs

anyproxy的安装

           npm install -g anyproxy

anyproxy启动,参数

anyproxy  --intercept  代理https请求(下文有)

                 --port  8009  自定义代理端口(默认是8001,web端口是8002)

                 --rule   xxx.js  使用自定义的规则文件过滤二次开发需求

查看代理客户端的请求:http://ip:8002

https代理

      生成ca证书

           命令:anyproxy-ca

     下载及查找证书

           http://ip:8002/fetchCrtFile  下载方式

           http://ip:8002/qr_root         二维码方式

使用pm2管理anyproxy进程

      pm2:node应用进程的管理器(负载均衡)

      安装pm2

          npm install -g pm2

      pm2运行anyproxy

           pm2 start anyproxy -x -- -intercept --rule xxx.js

      pm2的其他一些命令

           pm2 delete/restart anyproxy   重启,关闭anyproxy

           pm2 logs anyproxy  anyproxy的运行日志

           pm2 monit   anyproxy的内存信息

anyproxy的二次开发指南

 二次开发的细节部分可以参照

https://github.com/alibaba/anyproxy/tree/master/rule_sample

这部分分别对

http请求协议, http请求头,http请求body

http返回状态码,http返回头,http返回body

做了详细说明

例如下面的rule.js模块

module.exports={

*beforeSendResponse(requestDetail,responseDetail) {

if(requestDetail.url==='http://httpbin.org/user-agent') {

constnewResponse=responseDetail.response;

newResponse.body+='-- AnyProxy Hacked! --';

returnnewPromise((resolve,reject)=>{

setTimeout(()=>{//delay the response for 5s

resolve({ response:newResponse });

},5000);

      });

    }

  },

};

测试方式如下

先启动anyproxy

anyproxy --rule   rule.js

命令行执行下面的语句

curl 'http://httpbin.org/user-agent' --proxy http://127.0.0.1:8001

你会收到下面的信息

{ "user-agent": "curl/7.43.0" } -- AnyProxy Hacked! --

nodejs的一些知识点

关于rule.js文件的测试,平时javascript的函数都是可以使用的,

比如查找字符串的位置:indexOf

查找子字符串:substring

字符串转json对象:JSON.parse(string)

json对象转字符串:JSON.strify(object)

下面仅仅以在规则rule.js中发送一个http post请求结尾,因为这个需求还是很多的,比如你做了中间代理,获取想要的信息以后,你肯定想要存放到自己的服务器上等等



var  data={

    param1:param1,

    param2:param2

};

data = JSON.stringify(data);

var options = {

method:"POST",

host:"1207.0.0.1",

port : 8000,

path: '/face/info',

headers : {

    'Context-Type':'application/json'

}

};

var req = http.request(option, function(res)){

    res.setEncoding('utf-8');

    res.on('data', function(chunk){

    });

});

req.on('error', function(e){

    console.log("xxx: "+e.message())

});

req.write(data);

req.end();

你可能感兴趣的:(anyproxy代理服务器简要指南)