2014-09-17 3 views
5

Попытки поставить на месте HTTP-прокси с логикой пользовательской маршрутизации с помощью http-proxy 1.4.3, после этого tuto и исполняющий код ниже:nodejs: таблица маршрутизации с использованием HTTP-прокси

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); 

При попытке, как показан в Tuto, доступ http://localhost:8080/anything я в конечном итоге со следующей ошибкой

/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) 

, как я nodejs Noobie, я действительно невежественны.

+0

Пожалуйста, ваши код. – BadZen

+0

Я использую тот же самый код, что и в уроке, приведенном выше – MaK

+0

. вложенный код не –

ответ

8

Как упоминалось в комментариях к @BadZen, код был устаревшим после прохождения http-proxy readme, я в конечном итоге редактировал свой код для этого (и да, это работает), конечно, м создание Apache с использованием виртуальных доменов прокси-реверс для foo.loc и bar.loc поэтому они указывают на localhost:9000, но это выходит за рамки этого вопроса

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

Я пытаюсь использовать этот код, но имею: Ошибка: сокет зависает и прокси-сервер полностью. Как я могу это исправить ? У меня есть запрос http/https с веб-сокетом – jaumard

 Смежные вопросы

  • Нет связанных вопросов^_^