https://github.com/phyuany/simple-pingora-reverse-proxy
The simple pingora reverse proxy code sample.
https://github.com/phyuany/simple-pingora-reverse-proxy
Last synced: about 2 months ago
JSON representation
The simple pingora reverse proxy code sample.
- Host: GitHub
- URL: https://github.com/phyuany/simple-pingora-reverse-proxy
- Owner: phyuany
- License: mit
- Created: 2024-06-11T11:16:18.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2024-06-19T03:11:45.000Z (12 months ago)
- Last Synced: 2025-04-15T15:56:16.584Z (about 2 months ago)
- Language: Rust
- Size: 26.4 KB
- Stars: 8
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Pingora 实现的高效负载均衡 HTTP 代理
这个项目展示了如何使用 Rust 的 `pingora` crate 创建带负载均衡的 HTTP 代理服务器。
## 一、功能
- **HTTP 代理服务**:将传入的 HTTP 请求代理到上游服务器。
- **负载均衡**:使用轮询算法将流量分配到多个上游服务器。
- **TLS 支持**:使用指定的证书和密钥文件支持 TLS 和 HTTP/2。## 二、入门
### 先决条件
- 已安装 Rust 编程语言。你可以从 [这里](https://www.rust-lang.org/) 安装。
### 2.1 项目结构
- `src/main.rs`:包含服务器设置和配置的主要 Rust 源文件。
- `keys/`:存放 TLS 证书 (`example.com.crt`) 和密钥 (`example.com.key`) 的目录。### 2.2 设置
1. 克隆仓库:
```sh
git clone https://github.com/phyuany/simple-pingora-reverse-proxy.git
cd simple-pingora-reverse-proxy
```2. 将你的 TLS 证书和密钥文件放入 `keys` 目录:
```sh
mkdir keys
# 将你的 example.com.crt 和 example.com.key 文件放到 keys 目录中
```3. 构建并运行服务器:
```sh
cargo run
```### 2.3 服务器配置
- 服务器监听 `80` 端口处理 HTTP 流量。
- 服务器监听 `443` 端口处理带 TLS 的 HTTPS 流量。
- 使用轮询算法在两个上游服务器 `10.0.0.1:8080` 和 `10.0.0.2:8080` 之间进行负载均衡。### 2.4 代码概览
- **服务器初始化**:创建并配置一个 `Server` 实例。
- **负载均衡器**:创建一个 `LoadBalancer` 实例来管理多个上游服务器。
- **HTTP 代理服务**:使用服务器设置和负载均衡器进行配置,并监听特定端口。
- **TLS 设置**:配置以启用 HTTP/2 并使用指定的证书和密钥文件。
- **服务列表**:将服务添加到服务器,服务器进入事件循环开始处理请求。### 2.5 示例用法
该代理服务器设计用于将传入的 HTTP 请求转发到指定的上游服务器,使用轮询算法,并且为所有上游请求设置 `Host` 头为 `example.com`。
### 2.6 备注
- **SNI(服务器名称指示)**:`HttpPeer` 配置了 SNI,以确保在与上游服务器建立 TLS 连接时使用正确的主机名。
## 三、贡献
如果你有任何建议或改进,欢迎提交问题或拉取请求。
## 四、许可证
本项目使用 MIT 许可证。