2013-08-20 4 views
0

Я пишу прокси-сервер HTTP/HTTPS в Node.JS, я хочу, чтобы сервер обрабатывал трафик HTTPS на том же порту, что и HTTP.HTTPS на том же порту, что и HTTP?

На рисунке ниже объясняет, почему я хочу сделать это, пользователь может просто проверить коробку ...

Proxy Settings

Я понимаю, что я не могу иметь 2 сервера прослушивает тот же самый порт, но есть ли способ установить главный сервер, который перенаправляет трафик на трафик HTTP или HTTPS?

Что-то вроде этого:

http.createServer(myHTTPCallback).listen(3129, '127.0.0.1'); 
https.createServer(myHTTPSCallback).listen(3130, '127.0.0.1'); 


//Then a main server that will listen for both kinds of traffic 

main.createServer(function(req, res){ 
    if(/*Traffic is HTTPS*/){ 
     //Forward to 127.0.0.1:3130 
    } 
    else{ 
     //Forward to 127.0.0.1:3129 
    } 
}).listen(3128, '192.168.0.2'); 

Как бы я код выше?


РЕДАКТИРОВАНИЕ - По-Jester @ Крис Янг ответ

Я создал этот простой сервер, но я только получить выход для HTTP запросов. Также точки останова или консоль журналы не отслеживают:

var http = require('http'); 

http.createServer(function(req, res){ 
    res.write('<h1>Resquest Received</h1>'); 
    res.write('<span>Requested URL = ' + req.url + '</span>'); 

    res.end(); 
}).listen(3128); 
+0

Downvoter - объясните, пожалуйста? – Drahcir

ответ

3

Вам не нужно слушать, как HTTP и HTTPS на тот же порт, в вашем конкретном случае написания прокси-сервер. Браузеры подключаются к прокси-серверам через HTTP, будь то для проксирования HTTP или HTTPS-запросов. HTTPS-запросы используют HTTP-метод CONNECT, чтобы открыть прямое подключение к серверу HTTPS. CONNECT запрос по-прежнему выполняется в незашифрованной части прокси-трафика.


Edit: Вот что я думаю, что ваш код должен выглядеть следующим образом:

http.createServer(function (request, response) { 
    // Handle normal requests here 
}).on('connect', function (request, socket, head) { 
    // Handle CONNECT requests here 
}).listen(3128); 
+0

У меня есть HTTP-сервер, который работает как прокси. Чтобы проверить вашу идею, я поставил точку останова в обратном вызове, но она не запускается при посещении URL-адреса HTTPS. – Drahcir

+0

Где находится точка останова? В обработчике соединения? Помните, что HTTPS-соединения используют метод 'CONNECT', поэтому вам нужно следить за этим (а не для' GET', 'POST' и т. Д.). –

+0

См. Мое редактирование. Я устанавливаю точку останова или 'console.log' в верхней части обратного вызова, но не запускается. – Drahcir

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