2013-08-20 87 views
0

我正在Node.JS中編寫HTTP/HTTPS代理服務器,我希望服務器在與HTTP相同的端口上處理HTTPS流量。與HTTP相同的端口上的HTTPS?

下面的圖片解釋了爲什麼我要做到這一點,用戶只需勾選...

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

如何將我上面代碼中的?


編輯 - 按@克里斯小丑,年輕的答案

我創造了這個簡單的服務器,但我只收到輸出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請求使用CONNECT HTTP方法來打開與HTTPS服務器的直接連接--- CONNECT請求仍在未加密部分的代理通信中完成。


編輯:這就是我想你的代碼應該是這樣的:

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

我有一個作爲代理工作的HTTP服務器。爲了測試您的想法,我在回調中放置了一個斷點,但在訪問HTTPS URL時未觸發它。 – Drahcir

+0

你的斷點在哪裏?在連接處理程序?請記住,HTTPS連接使用'CONNECT'方法,因此您必須注意(而不是'GET','POST'等)。 –

+0

請參閱我的編輯。我在回調的頂部放置了斷點或'console.log',但沒有被觸發。 – Drahcir

相關問題