
简单分享OpenResty下的443端口共用方案
前言
在某些特殊场景下(比如,流邦卡定向免流),需要用到443(SSL/TLS)端口,A服务需要用到,B服务也要用到,但是操作系统内同一时刻只允许一个程序来监听同一个端口。所以本文基于Debian 12
系统来分享一下443端口的共用方案。
首先安装OpenResty
- 安装必要的依赖
1 | sudo apt update |
- 添加 OpenResty 官方仓库
1 | curl -fsSL https://openresty.org/package/pubkey.gpg | sudo gpg --dearmor -o /usr/share/keyrings/openresty-archive-keyring.gpg |
- 添加 OpenResty 的仓库到 APT 源列表
1 | echo "deb [signed-by=/usr/share/keyrings/openresty-archive-keyring.gpg] http://openresty.org/package/debian $(lsb_release -sc) openresty" | sudo tee /etc/apt/sources.list.d/openresty.list |
- 安装 OpenResty
1 | sudo apt update |
- 启动和配置 OpenResty
1 | sudo systemctl start openresty |
添加 stream
模块
编辑 /etc/openresty/nginx.conf
文件,添加 stream
模块。
注意:stream模块和http模块应是平级关系。
1 | stream { |
端口复用的原理
说到这里,就简单的说一下原理了。stream
模块是 OpenResty 提供的专门用来处理 TCP/UDP 协议的模块,通过 proxy_pass
指令转发请求到对应的 upstream
模块即可。而 map
指令则是用来定义一个映射关系的,通过 map
指令,我们可以将一个变量映射到另一个变量,从而实现端口复用。
分享一个流邦定向免流方案
我用的是Trojan协议进行流量转发,Trojan协议是使用TLS加密的,且流邦免流需要用到443端口,而网站https也需要用到443,刚好符合OpenResty挡在前面来分流。混淆用的抖音系列host p26.douyinpic.com
。自签证书
和trojan搭建
这里不再赘述。
OpenResty 配置
tips: 如果原本https监听端口为443,需要修改为8443端口
1 |
|
结语
OpenResty的stream模块是工作在 OSI模型的(四层)传输层,而http模块是工作在(七层)应用层。恰巧trojan是基于TCP传输,所以可以通过这种方法来实现443端口的复用。
- 标题: 简单分享OpenResty下的443端口共用方案
- 作者: Bachelor LEE
- 创建于 : 2024-11-10 20:47:27
- 更新于 : 2024-11-10 21:48:26
- 链接: https://blog.inik.cc/2024/11/10/00356b776dfa.html
- 版权声明: 本文章采用 CC BY-NC 4.0 进行许可。