2015-08-10 24 views
6

io uso questo codice Voglio creare proxy che tutte le chiamate di richiesta a porta 3000 verranno instradati "sotto il cofano" alla porta 3002richiesta proxy a nuovo porto con http-proxy

var http = require('http'), 
    httpProxy = require('http-proxy'); 

var proxy = httpProxy.createProxyServer(); 

    http.createServer(function (req, res) { 
    proxy.web(req, res, { 
     target: 'http://localhost:3002' 
    }); 
}).listen(3000); 

// Create target server 
http.createServer(function (req, res) { 
    res.writeHead(200, { 'Content-Type': 'text/plain' }); 
    res.write('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2)); 
    res.end(); 
}).listen(3002); 

Ora, quando ho eseguire l'applicazione con la porta originale (3000) vedo nel browser

richiesta inoltrata con successo per 3002

  • quando cambio la porta (nel browser) per Ricevo ancora lo stesso messaggio, perché? va bene?

  • Cosa devo mettere in produzione all'interno del secondo creare server? Voglio dire invece della

    res.writeHead(200, { 'Content-Type': 'text/plain' }); 
    res.write('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2)); 
    res.end(); 
    
  • Condivide la res.end() dovrebbe essere anche lì?

io uso il codice da https://github.com/nodejitsu/node-http-proxy

risposta

4

quando cambio la porta (nel browser) per 3002 ancora ottengo lo stesso messaggio, perché? va bene?

Questo va benissimo. Si imposta un server "reale" in ascolto sulla porta 3002. Se si tenta di accedervi direttamente, non c'è motivo per cui non funzioni, e quale sia il proprio gestore di eventi di richiesta (su quel server) restituisce la stringa "richiesta con esito positivo a proxy : "+ l'url. Niente di speciale da vedere qui :-)

Cosa devo mettere in produzione all'interno del secondo server di creazione?
fa il res.end() dovrebbe essere lì

Si dovrebbe mettere un po 'vera e propria logica server di utile,. Non hai descritto cosa fa il tuo server, e non penso che sia rilevante per la domanda che fai. Se res.end() dovrebbe essere lì o no è una funzione di ciò che fa il server. Quindi, di nuovo, niente da vedere qui :-)

+0

Grazie Amit 1+, riguardano la seconda ... voglio solo procura tutte le richiesta dal porto 3000 al 3002 che! , quindi cosa devo inserire nella creazione del secondo server? solo res.end()? –

+0

Il punto nella creazione di un proxy (inverso) è di inoltrare/nascondere/LB/altre richieste che arrivano attraverso un endpoint a un server reale su un altro endpoint (solitamente interno). In questi casi, non è necessario creare il secondo server. Dovrebbe già "esserci", facendo qualcosa di utile. – Amit

+0

Grazie Amit, così puoi fornire nel post come dovrebbe essere esattamente come dovrebbe assumere che io debba usare solo proxy da 3000 a 3002, come lo scriveresti (in prod) dato che sono abbastanza nuovo in questo argomento, Grazie in anticipo, signore! –

1

Se volete vedere una stretta vero e proprio scenario provare ad aggiungere un nome host nel funciton ascoltare:

}).listen(3002,'127.0.0.1'); 

e quindi provare a connettersi da altri computer (o con lo stesso computer ma usando il tuo IP di rete). Se il tuo IP netto è 192.12.13.14 prova:

http://192.12.13.14:3002 

e

http://192.12.13.14:3000 

per vedere il diference