2014-10-11 2 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'); 

내가 뭘 원하는

  • 수신 내 대상 서버에서 원래의 대상 URL로 보내기 내 대상 서버에 대한 클라이언트 (브라우저)에서

    1. 프록시 나가는 요청입니다 내 대상 서버의 응답
    2. 응답을 클라이언트에 다시 보냅니다.

    기본적으로 중개인이 클라이언트와 대상 서버 사이에 배치되어 트래픽을 모니터링 할 수 있습니다. 그러나이 작업을 시도하면 302 요청을 마친 즉시 ECONN 오류가 발생합니다.

    Error: connect ECONNREFUSED 
        at errnoException (net.js:901:11) 
        at Object.afterConnect [as oncomplete] (net.js:892:19) 
    
    나는 302 Location 인수과 같이 변경

    UPDATE

    에가는 무슨

    사람이 저를 알아내는 데 도움이 할 수 : 이제

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

    , 브라우저가 타격 시도 내 프록시 서버, 리디렉션 루프를 입력합니다. 왜 이런 일이 일어나는 걸까요?

  • +0

    아직도 사용 하시나요? 나는 똑같은 것을 이루려고 노력하고있어 아무 것도 할 수 없다 ... – Valip

    +0

    @Valip no luck :( – dopatraman

    답변

    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 쿼리가이 서버를 가리켜 야합니다 : 다음은 예입니다.

    관련 문제