2013-08-20 53 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

相关问题