繁体   English   中英

Node.js代理,用于监视网络请求和响应

[英]Node.js proxy for monitor network requests and responses

我正在使用Nodejitsu的http代理来构建监视网络流量的工具。

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. 将响应发送回客户端

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

现在,当浏览器尝试访问我的代理服务器时,它将进入重定向循环。 为什么会这样呢?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM