0

Im, создающий новый сервер для прослушивания нового порта (со вторым созданием ниже), теперь, когда я вызываю приложение с каким-то портом, я хочу перенаправить его на новый создан порт сервера и поместить сообщение в браузере «Запрос пути к на 9009»Ошибка при попытке перенаправить приложение на новый серверный порт

Я использую следующий код для создания сервера

httpProxy = require('http-proxy'); 

proxy = httpProxy.createProxyServer({}); 

    http.createServer(function (req, res) { 
      var hostname = req.headers.host.split(":")[0]; 
      if (hostname ==='localhost') { 
       proxy.web(req, res, {target: 'http://localhost:9009'}); 
      }  
} }).listen(3000, function() { 
     console.log('App listening on port 3000'); 
    }); 
now I create the new server 

http.createServer(function (req, res) { 
res.writeHead(302, { 
    'Location': 'http://localhost:9009' 
}); 

    res.end("Request route to 9009"); 
}).listen(9009); 

теперь, когда я поставил локальный: 3000 это перенаправляет меня localhost: 9009 (что именно то, что мне нужно Я вижу в лоб сер), но я получил ошибкиThis webpage has a redirect loop ERR_TOO_MANY_REDIRECTS

Если удалить из второго createServer функционируют следующие

res.writeHead(302, { 
    'Location': 'http://localhost:9009' 
}); 

это не перенаправляет и я не получил ошибку ... я поставил этот код в неправильном месте? или есть способ сделать это разным? Я использую https://github.com/nodejitsu/node-http-proxy

обновление

изменить код к следующему

var http = require('http'); 

http.createServer(function (req, res) { 
    console.log("Server created"); 
    res.writeHead(200, { 'Content-Type': 'text/plain' }); 
    res.write('9009 here' + '\n' + JSON.stringify(req.headers, true, 2)); 
    res.end(); 
}).listen(9009); 

http.createServer(function(req, res) { 
    console.log("Server 2 created"); 
    res.writeHead(302, { 
     'Location': 'http://localhost:9009/' 
    }); 
    res.end("Request route to 9009"); 
}).listen(3001); 
+0

Почему вы прокси-порт 9009 на порт 3000, если вы хотите, чтобы клиент перенаправлялся на 9009? когда вы прокси-сервер, вы делаете контент, доступный в порту 9009, также доступным на порту 3000. Если вы просто хотите отправить трафик с порта 3000 на другой порт, не используйте прокси, а просто перенаправляйте их на http. – dandavis

+0

Вы хотите, чтобы каждый посетитель перенаправлялся на новый уникальный порт или все посетители порта 9009? – dandavis

+0

@ dandavis-позволяет предположить, что приложение будет маршрутизировать до 9009, возможно ли это? Вы можете помочь, как это сделать? –

ответ

1

в коде вы показываете, прокси на порту 9009 показать на порт 3000, больше как апач URL Rewrite, чем перенаправление URL.

если вы хотите отправить посетитель посадку на порт 3000 на порт 9009, простой HTTP много:

var http = require('http'); 

http.createServer(function (req, res) { 
    res.writeHead(200, { 'Content-Type': 'text/plain' }); 
    res.write('9009 here' + '\n' + JSON.stringify(req.headers, true, 2)); 
    res.end(); 
}).listen(9009); 

http.createServer(function(req, res) { 
    res.writeHead(302, { 
     'Location': 'http://X.X.X.X:9009/' // fix me 
    }); 
    res.end("Request route to 9009"); 
}).listen(3000); 

если вы хотите каждый посетитель нового личного порта, это простой, но наивный способ сделать поэтому (не учитывая повторяющиеся порты, которые будут разбивать узел на 1/1000 раз):

var http = require('http'); 
http.createServer(function(req, res) { 
    var port=Math.floor(Math.random()*1000)+12000; 
    http.createServer(function (req, res) { 
     res.writeHead(200, { 'Content-Type': 'text/plain' }); 
     res.write(port + ' talking' + '\n' + JSON.stringify(req.headers, true, 2)); 
     res.end(); 
    }).listen(port); 

    res.writeHead(302, { 
     'Location': 'http://X.X.X.X:'+ port +'/' // fix me 
    }); 
    res.end("Request route to " + port); 
}).listen(3000); 
+0

Большое спасибо, это работает, голосует! У меня еще два вопроса 1. когда я попал в браузер на localhost: 3000 я увидел в консоли Server 2 создал Созданный сервер Сервер создал эти 3 записи, и когда я нажимаю на 9009, я видел дважды созданный сервер, это нормально 3 и 2 звонка? 2. Если я хочу поместить некоторую логику, которая будет обрабатывать URL-адрес из сообщения и получить вызов, где вы предлагаете это сделать? –

+0

1. Я не уверен, что вы просите. первый код должен сделать два сервера для десяти клиентов, второй код должен сделать одиннадцать серверов для десяти клиентов. я бы не использовал второй код, если только вы не напишете гораздо больше кода для обработки выключения серверов, когда клиент будет выполнен. 2. Я думаю, что у POST есть проблемы с перенаправлением, поэтому вы хотите поместить этот код на сервер сервера 9009. – dandavis