实现http和https共用同一个端口
 发布于 7 年前  作者 lvgithub  7501 次预览  最后一次回复是 7 年前  来自 分享 

实现http和https共用一个端口原理

1. HTTP与HTTPS都属于应用层协议,所以只要我们在底层协议中进行反向代理,
就可以解决这个问题! 因此我们可以选择底层的tcp服务进行代理!
2. https数据流的第一位是十六进制“16”,转换成十进制就是22
3. 通过数据流的第一位置,决定最终反向代理给http\https服务
4. 具体实现方案有如下三种

源码地址,欢迎下载测试,提出更好的方案,持续更新优化

  • 方案一 1.png

  • 方案二 1.png

  • 方案三 3.png

10 回复
lvgithub

知识点: 1. http和https的区分 2. socket 3. 背压 4. stream

fruit-memory

@lvgithub 背压stream是什么?

Binaryify

这个在 nginx 下很容易实现的,还不需要改原有代码

burning0xb

背压比较好的解决方案楼主能提供下吗

royalrover

方案一与方案三出了 socket readable部分处理头部首字节的不同,还有区别点吗?其实方案二才是最适合的,这在child_process创创建多进程的服务模式下是最常用的

lvgithub

@royalrover 为什么方案3 最合适

lvgithub

@burning0xb 上面代码中就有

royalrover

@lvgithub 我说的是方案二,直接通过emit connection事件处理,不用手动操作socket进行pipe

p2227

这有什么意义吗?