这个项目展示了如何使用 Rust 的 pingora
crate 创建带负载均衡的 HTTP 代理服务器。
- HTTP 代理服务:将传入的 HTTP 请求代理到上游服务器。
- 负载均衡:使用轮询算法将流量分配到多个上游服务器。
- TLS 支持:使用指定的证书和密钥文件支持 TLS 和 HTTP/2。
- 已安装 Rust 编程语言。你可以从 这里 安装。
src/main.rs
:包含服务器设置和配置的主要 Rust 源文件。keys/
:存放 TLS 证书 (example.com.crt
) 和密钥 (example.com.key
) 的目录。
-
克隆仓库:
git clone https://github.com/phyuany/simple-pingora-reverse-proxy.git cd simple-pingora-reverse-proxy
-
将你的 TLS 证书和密钥文件放入
keys
目录:mkdir keys # 将你的 example.com.crt 和 example.com.key 文件放到 keys 目录中
-
构建并运行服务器:
cargo run
- 服务器监听
80
端口处理 HTTP 流量。 - 服务器监听
443
端口处理带 TLS 的 HTTPS 流量。 - 使用轮询算法在两个上游服务器
10.0.0.1:8080
和10.0.0.2:8080
之间进行负载均衡。
- 服务器初始化:创建并配置一个
Server
实例。 - 负载均衡器:创建一个
LoadBalancer
实例来管理多个上游服务器。 - HTTP 代理服务:使用服务器设置和负载均衡器进行配置,并监听特定端口。
- TLS 设置:配置以启用 HTTP/2 并使用指定的证书和密钥文件。
- 服务列表:将服务添加到服务器,服务器进入事件循环开始处理请求。
该代理服务器设计用于将传入的 HTTP 请求转发到指定的上游服务器,使用轮询算法,并且为所有上游请求设置 Host
头为 example.com
。
- SNI(服务器名称指示):
HttpPeer
配置了 SNI,以确保在与上游服务器建立 TLS 连接时使用正确的主机名。
如果你有任何建议或改进,欢迎提交问题或拉取请求。
本项目使用 MIT 许可证。