2014-09-17 6 views
5

Der Versuch, anstelle eines HTTP-Proxy mit einer benutzerdefinierten Routing-Logik zu setzen http-proxy 1.4.3 verwenden, nach dieser tuto und Ausführen des Codes unter:NodeJS: Routing-Tabelle mit http-Proxy

var httpProxy = require("http-proxy"); 
var url = require("url"); 

httpProxy.createServer(function(req, res, proxy) { 

    var hostname = req.headers.host.split(":")[0]; 
    var pathname = url.parse(req.url).pathname; 

    // Options for the outgoing proxy request. 
    var options = { host: hostname }; 

    // Routing logic 
    if(hostname == "127.0.0.1") { 
     options.port = 8083; 
    } else if(pathname == "/upload") { 
     options.port = 8082; 
     options.path = "/"; 
    } else { 
     options.port = 8081; 
    } 
    // (add more conditional blocks here) 

    proxy.proxyRequest(req, res, options); 

}).listen(8080); 

console.log("Proxy listening on port 8080"); 

// We simulate the 3 target applications 
var http = require("http"); 

http.createServer(function(req, res) { 
    res.end("Request received on 8081"); 
}).listen(8081); 

http.createServer(function(req, res) { 
    res.end("Request received on 8082"); 
}).listen(8082); 

http.createServer(function(req, res) { 
    res.end("Request received on 8083"); 
}).listen(8083); 

Beim Versuch, wie in der gezeigt tuto, um Zugang zu http://localhost:8080/anything ich am Ende mit dem folgenden Fehler

/var/www/node.proxy/node_modules/http-proxy/lib/http-proxy/index.js:119 
throw err; 
    ^
Error: Must provide a proper URL as target 
    at ProxyServer.<anonymous> (/var/www/node.proxy/node_modules/http-proxy/lib/http-proxy/index.js:68:35) 
    at Server.closure (/var/www/node.proxy/node_modules/http-proxy/lib/http-proxy/index.js:125:43) 
    at Server.EventEmitter.emit (events.js:98:17) 
    at HTTPParser.parser.onIncoming (http.js:2108:12) 
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23) 
    at Socket.socket.ondata (http.js:1966:22) 
    at TCP.onread (net.js:525:27) 

als ich ein NodeJS noobie bin, bin ich wirklich ratlos.

+0

Bitte Code schreiben. – BadZen

+0

Ich benutze genau den gleichen Code wie im Tutorial Link über – MaK

+0

Links Pause. eingefügte Code nicht –

Antwort

8

Also wie von @BadZen in den obigen Kommentaren erwähnt, war der Code veraltet, nachdem ich den http-proxy readme gelesen hatte, habe ich am Ende meinen Code bearbeitet (und ja, es funktioniert), natürlich, ich ' m Erstellen von apache vhosts mit Proxy-Reverse für foo.loc und bar.loc so weisen sie auf localhost:9000, aber es ist aus dem Rahmen dieser Frage

var http = require('http'), 
    httpProxy = require('http-proxy'), 
    proxy = httpProxy.createProxyServer({}), 
    url = require('url'); 

http.createServer(function(req, res) { 
    var hostname = req.headers.host.split(":")[0]; 
    var pathname = url.parse(req.url).pathname; 

    console.log(hostname); 
    console.log(pathname); 

    switch(hostname) 
    { 
     case 'foo.loc': 
      proxy.web(req, res, { target: 'http://localhost:9001' }); 
      break; 
     case 'bar.loc': 
      proxy.web(req, res, { target: 'http://localhost:9002' }); 
      break; 
     default: 
      proxy.web(req, res, { target: 'http://localhost:9003' }); 
    } 
}).listen(9000, function() { 
    console.log('proxy listening on port 9000'); 
}); 

// We simulate the 3 target applications 
http.createServer(function(req, res) { 
    res.end("Request received on 9001"); 
}).listen(9001); 

http.createServer(function(req, res) { 
    res.end("Request received on 9002"); 
}).listen(9002); 

http.createServer(function(req, res) { 
    res.end("Request received on 9003"); 
}).listen(9003); 
+0

Ich versuche diesen Code aber habe: Fehler: Socket auflegen und Proxy-Absturz vollständig. Wie kann ich das beheben? Ich habe http/https Anfrage mit Web-Socket – jaumard