http-proxy处理转发请求响应

来源:互联网 发布:真空料理机 鱼汤 知乎 编辑:程序博客网 时间:2024/05/16 16:05

最近参与了一个基于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/

  • 当ignorePath为true时,代理服务器转发时不会添加path,直接请求http://target.iqiyi.com/lib/mac/dianshiju/
  • 当ignorePath为false时,代理服务器转发请求时,会附加上原地址的path,去请求http://target.iqiyi.com/lib/mac/dianshiju/test

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

原创粉丝点击