详细说明节点如何允许端口同时支持HTTPS和HTTP。
节点是众所周知的高性能Web服务器,它可以用于简单地创建HTTP或HTTPS服务器。例如,一个非常简单的HTTP服务器:
var http =需要('http');
VaR的HTTPS =需要('https);
无功httpport = 3345;
VaR服务器= http.createserver(功能(REQ,RES){
res.writehead(200,{ 'content-type:中/平原});
res.end('Hello World!;
})听(httpport);
HTTPS服务器需要生成证书。详情见文章:HTTPS的原理和实现Nodejs这里我们直接看最后的结果,附件证书。
VaR的HTTPS =需要('https);
VaR FS =需要('fs);
无功httpsport = 3346;
var选项{ {
关键词:fs.readfilesync('。 / cakey。PEM),
证书:fs.readfilesync('。 / --cacert指定。PEM)
};
VaR服务器= https.createserver(选项功能(REQ,RES){
res.writehead(200,{ 'content-type:中/平原});
res.end('secured你好世界);
})听(httpsport);
我们可以从上面看到,每个服务器生成的节点必须分配一个端口。所以,如果我们遇到了一个要求:让相同的端口地址或都支持HTTP协议和HTTPS协议的支持,那么我们应该怎样做,有些学生可能认为使用nginx做反向代理,它是一个解决方案,但这也意味着产品的用户增加的复杂度不想折腾NGNIX。
它的原理是从OSI的七层模型中移出:
HTTP和HTTPS都是应用层协议,因此只要我们在底层协议中进行反向代理,就可以解决这个问题。只要节点可以方便我们创建一个TCP服务器。
所以我们的核心代码如下:
无功网=需要('net);
var http =需要('http');
VaR的HTTPS =需要('https);
VaR FS =需要('fs);
无功httpport = 3345;
无功httpsport = 3346;
VaR服务器= http.createserver(功能(REQ,RES){
res.writehead(200,{ 'content-type:中/平原});
res.end('Hello World!);
})听(httpport);
var选项{ {
关键词:fs.readfilesync('。 / cakey。PEM),
证书:fs.readfilesync('。 / --cacert指定。PEM)
};
VaR服务器= https.createserver(选项功能(REQ,RES){
res.writehead(200,{ 'content-type:中/平原});
res.end('secured你好世界);
})听(httpsport);
net.createserver(功能(插座){)
Socket.once(数据功能(BUF){
console.log(BUF { 0 });
数据流是第十六个十六进制到十进制的转换,是16, 22。
地址:httpport VaR httpsport = buf { 0 } = 22;
创建一个指向HTTPS或HTTP服务器链接的指针
风险代理= net.createconnection(地址、函数(){(){
proxy.write(BUF);
过程反向代理,TCP将数据接收到代理服务器代理链接,套接字返回的链接数据返回给客户机。
socket.pipe(代理)Pipe(插座);
});
proxy.on(错误功能(ERR){
console.log(ERR);
});
});
Socket.on(错误,函数(ERR){
console.log(ERR);
});
}听(3344);
以上是本文的全部内容,希望能对您有所帮助,希望大家多多支持。