监控networking请求和响应的Node.js代理

我正在使用Nodejitsu的http代理来构build一个工具来监控networkingstream量。

httpProxy.createProxyServer({ target: 'http://localhost:9000' }) .listen(8000); util.puts('proxy server listening on port 8000'); http.createServer(function targetServer(req, res) { res.writeHead(302, { 'Location': req.headers.host }); util.puts('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2)); res.end(); }) .listen(9000); util.puts('target server listening on port 9000'); 

我想要做的是

  1. 代理从客户端(浏览器)传出的请求到我的目标服务器
  2. 将他们发送到我的目标服务器的原始目标url
  3. 在我的目标服务器上接收响应
  4. 将响应发送回客户端

基本上有一个中间人放置在客户端和目标服务器之间,所以我可以监控stream量。 但是,当我尝试这样做时,一旦我发出302请求,我得到一个ECONN错误。

 Error: connect ECONNREFUSED at errnoException (net.js:901:11) at Object.afterConnect [as oncomplete] (net.js:892:19) 

任何人都可以帮我弄清楚是怎么回事

UPDATE

我改变了302 Location参数,如下所示:

 res.writeHead(302, { 'Location': '/' }); 

现在,当浏览器尝试点击我的代理服务器时,它将进入redirect循环。 为什么发生这种情况?

如果你打算用你的代理服务器的ip来代替dns查询,那么可能的 – 只有在没有ssl的情况下,由于每个域的证书都是无效的,才有效。 否则,我不知道应该如何工作。 这里是一个例子:

 const httpProxy = require('http-proxy'); const http = require('http'); var proxy = httpProxy.createProxyServer(); var server = http.createServer(function(req, res) { proxy.web(req, res, { target: 'http://' + req.headers.host + req.url }); console.log('Yay, got it routed through my proxy.'); console.log(req.connection.remoteAddress + '--->' + req.headers.host); }); proxy.on('end', function(req, res) { console.log(req.connection.remoteAddress + '<---' + req.headers.host); // Do some nasty tracking and monitoring }); server.listen(8000); 

如果您尝试监视传出请求,则Dns查询必须指向此服务器。