实现http和https共用同一个端口
发布于 7 年前 作者 lvgithub 6902 次浏览 来自 分享

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

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

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

  • 方案一 1.png

  • 方案二 1.png

  • 方案三 3.png

10 回复

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

@lvgithub 背压stream是什么?

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

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

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

@royalrover 为什么方案3 最合适

@burning0xb 上面代码中就有

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

这有什么意义吗?

回到顶部