我正在Node.JS中编写HTTP / HTTPS代理服务器,我希望服务器在与HTTP相同的端口上处理HTTPS流量。
下图解释了为什么我要这样做,用户只需勾选方框...
我意识到我不能在同一个端口上监听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');
我如何编写以上内容?
编辑 - 根据@Chris Jester-Young的回答
我创建了这个简单的服务器,但我只接收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 :(得分: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);