2014-10-11 3 views
2

Я использую HTTP-прокси Nodejitsu для создания инструмента для мониторинга веб-трафика.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. Proxy исходящие запросы от клиента (браузера) к моей целевой сервер
  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': '/' }); 

Теперь, когда браузер пытается ударять мой прокси-сервер, он вводит цикл перенаправления. Почему это происходит?

+0

Вы все еще используете это? Я пытаюсь добиться того же самого и не могу получить ничего работающего ... – Valip

+0

@Valip не повезло :( – dopatraman

ответ

0

Если вы собираетесь заменить запросы DNS на ваш ip-адрес вашего сервера, это возможно - работает только тогда, когда не 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 запросы должны указывать на этот сервер, если вы пытаетесь контролировать исходящие запросы.