2015-08-10 16 views
6

ich diesen Code I-Proxy erstellen möchten verwenden, die alle Anwendungsaufrufe an Port 3000 wird „unter der Haube“ auf Port 3002Proxy Anfrage an neuen Port mit 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); 

Jetzt geroutet werden, wenn ich führen Sie die Anwendung mit Original-Port (3000) I im Browser sehen

Anfrage erfolgreich

  • bis 3002 proxied Wenn ich den Port ändern (im Browser) zu Ich bekomme immer noch die gleiche Nachricht, warum? Ist es o.k?

  • Was soll ich in Produktion innerhalb des zweiten erstellen Server setzen? Ich meine anstelle des

    res.writeHead(200, { 'Content-Type': 'text/plain' }); 
    res.write('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2)); 
    res.end(); 
    
  • Hat der res.end() auch da sein sollte?

Ich verwende den Code aus https://github.com/nodejitsu/node-http-proxy

Antwort

4

Wenn ich den Port (im Browser) ich immer noch die gleiche Nachricht erhalten zu 3002 zu ändern, warum? Ist es o.k?

Das ist völlig in Ordnung. Sie richten einen "echten" Server ein, der Port 3002 überwacht. Wenn Sie versuchen, direkt darauf zuzugreifen, gibt es keinen Grund dafür, nicht zu funktionieren, und was Ihr Anfrage-Event-Handler (auf diesem Server) tut, gibt die Zeichenkette "Anfrage erfolgreich an weitergeleitet zurück : "+ die URL. Nichts besonderes hier zu sehen :-)

Was soll ich in den zweiten Create Server einbauen?
Hat der res.end() sollte auch da sein

Sie sollten einige echte, nützliche Serverlogik setzen. Sie haben nicht beschrieben, was Ihr Server tut, und ich denke nicht, dass das für Ihre Frage relevant ist. Ob res.end() da sein soll oder nicht, hängt davon ab, was der Server macht. Also noch einmal, nichts zu sehen :-)

+0

Dank Amit 1+, die zweite betrachten ... Ich möchte nur Proxy alle Anfrage von Port 3000 bis 3002, dass es! , also was sollte ich in die zweite Server-Erstellung reinsetzen? res.end()? –

+0

Der Punkt bei der Erstellung eines (umgekehrten) Proxys ist das Weiterleiten/Verbergen/LB/anderer Anfragen, die von einem Endpunkt zu einem realen Server auf einem anderen Endpunkt (normalerweise intern) eingehen. In solchen Fällen müssen Sie den zweiten Server überhaupt nicht erstellen. Es sollte schon "da sein", etwas Nützliches tun. – Amit

+0

Danke Amit, also kannst du in der post angeben wie genau das aussehen soll davon ausgehen das ich nur Proxy von 3000 bis 3002 benutzen muss, wie würdest du es schreiben (in prod) da ich ziemlich neu zu diesem Thema bin, Vielen Dank im Voraus, Sir! –

1

Wenn Sie ein enger echte scenary Versuch sehen, wollen das Hinzufügen eines Hostnamen in der hört funciton:

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

und dann versuchen, von anderen Computern zu verbinden (oder mit der gleiche Computer, aber mit Ihrem Netzwerk IP). Wenn Ihr Netz IP 192.12.13.14 try ist:

http://192.12.13.14:3002 

und

http://192.12.13.14:3000 

um zu sehen, die diference