我正在使用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');
我想做的是
基本上在客户端和目标服务器之间放置一个中间人,这样我就可以监控流量。但是,当我尝试这样做时,一旦发出302请求,我就会收到ECONN
错误。
Error: connect ECONNREFUSED
at errnoException (net.js:901:11)
at Object.afterConnect [as oncomplete] (net.js:892:19)
任何人都可以帮我弄清楚最新情况吗
更新
我更改了302 Location
参数:
res.writeHead(302, { 'Location': '/' });
现在,当浏览器尝试命中我的代理服务器时,它会进入重定向循环。为什么会这样?
答案 0 :(得分: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查询必须指向此服务器。