http-proxy处理转发请求响应

最近参与了一个基于node开发的负载平衡转发框架,用到了http-proxy进行转发,但是需要统计转发到对应服务器的请求响应状态,通过查询资料发现如下:

const httpProxy = require('http-proxy');
http.createServer(function (req, res) {   
    httpProxy.web(req, res, {target: uri}, function (e) {
        console.log(e);
    });
}).listen(PORT);

httpProxy.createProxyServer({
    changeOrigin: true,
    ignorePath: true
});
httpProxy.on('proxyRes', function(proxyRes, req, res) {
    let host = proxyRes.req.getHeader('host');
    let path = proxyRes.req.path;
})

http-proxy可以监听proxyRes事件,当转发的请求返回响应时,会触发该事件。(当客户端发起请求时,http-proxy转发到对应的目标服务器上,目标服务器返回请求内容时,触发proxyRes事件,回调执行结束后,再返回res给客户端)

proxyRes.req.getHeader() 可以获取对应的header头信息,为了能够得到转发服务器地址,

创建代理服务器时,需要配置changeOrigin为true,该选项用于更改目标地址头信息。比如: 客户端请求地址为 test.iqiyi.com,转发的目标服务器地址为 target.iqiyi.com,当changeOrigin设置为true时,host得到的是target.iqiyi.com;当设置为false时,host的值为test.iqiyi.com

除了proxyRes事件外,http-proxy还支持proxyReq事件,用于转发请求前,执行相关回调逻辑。代码如下:

proxy.on('proxyReq', function(proxyReq, req, res) {
    console.log("url:" + proxyReq.path);
});

ignorePath用于转发请求时,是否将原请求地址中的path附加到转发地址后面。

比如: 客户端请求地址为:http://test.iqiyi.com/test,转发请求地址为:http://target.iqiyi.com/lib/mac/dianshiju/

使用http-proxy创建代理服务器时,一般都会设置 ignorePath为true,便于转发请求处理。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值