簡體   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