2014-10-11 72 views
2

我正在使用Nodejitsu的http代理构建监控网络流量的工具。监控网络请求和响应的Node.js代理

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. 送到他们原来的目标网址从我的目标服务器
  3. 接收我的目标服务器上的响应
  4. 将响应发送回客户端

基本上有一个中间人放置在客户端和目标服务器之间,所以我可以监控流量。但是,当我尝试执行此操作时,一旦发出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': '/' }); 

现在,当浏览器尝试打我的代理服务器,它进入重定向循环。这是为什么发生?

+0

你还用这个吗?我试图达到同样的目的,不能得到任何工作...... – Valip 2017-05-09 16:27:40

+0

@Valip不好运气:( – dopatraman 2017-05-10 17:50:58

回答

0

如果你打算用你的代理服务器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查询必须指向该服务器。