这个项目展示了如何使用 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 许可证。