{"id":21376573,"url":"https://github.com/phyuany/simple-pingora-reverse-proxy","last_synced_at":"2025-04-15T15:56:24.823Z","repository":{"id":244779191,"uuid":"813591421","full_name":"phyuany/simple-pingora-reverse-proxy","owner":"phyuany","description":"The simple pingora reverse proxy code sample.","archived":false,"fork":false,"pushed_at":"2024-06-19T03:11:45.000Z","size":27,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-15T15:56:16.584Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phyuany.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-11T11:16:18.000Z","updated_at":"2025-01-21T08:05:55.000Z","dependencies_parsed_at":"2024-06-19T10:34:35.349Z","dependency_job_id":"317eaf4d-5766-4927-a49f-cf00835d0d36","html_url":"https://github.com/phyuany/simple-pingora-reverse-proxy","commit_stats":null,"previous_names":["phyuany/simple-pingora-reverse-proxy"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phyuany%2Fsimple-pingora-reverse-proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phyuany%2Fsimple-pingora-reverse-proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phyuany%2Fsimple-pingora-reverse-proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phyuany%2Fsimple-pingora-reverse-proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phyuany","download_url":"https://codeload.github.com/phyuany/simple-pingora-reverse-proxy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249105471,"owners_count":21213534,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-22T09:16:31.730Z","updated_at":"2025-04-15T15:56:24.804Z","avatar_url":"https://github.com/phyuany.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pingora 实现的高效负载均衡 HTTP 代理\n\n这个项目展示了如何使用 Rust 的 `pingora` crate 创建带负载均衡的 HTTP 代理服务器。\n\n## 一、功能\n\n- **HTTP 代理服务**：将传入的 HTTP 请求代理到上游服务器。\n- **负载均衡**：使用轮询算法将流量分配到多个上游服务器。\n- **TLS 支持**：使用指定的证书和密钥文件支持 TLS 和 HTTP/2。\n\n## 二、入门\n\n### 先决条件\n\n- 已安装 Rust 编程语言。你可以从 [这里](https://www.rust-lang.org/) 安装。\n\n### 2.1 项目结构\n\n- `src/main.rs`：包含服务器设置和配置的主要 Rust 源文件。\n- `keys/`：存放 TLS 证书 (`example.com.crt`) 和密钥 (`example.com.key`) 的目录。\n\n### 2.2 设置\n\n1. 克隆仓库：\n\n    ```sh\n    git clone https://github.com/phyuany/simple-pingora-reverse-proxy.git\n    cd simple-pingora-reverse-proxy\n    ```\n\n2. 将你的 TLS 证书和密钥文件放入 `keys` 目录：\n\n    ```sh\n    mkdir keys\n    # 将你的 example.com.crt 和 example.com.key 文件放到 keys 目录中\n    ```\n\n3. 构建并运行服务器：\n\n    ```sh\n    cargo run\n    ```\n\n### 2.3 服务器配置\n\n- 服务器监听 `80` 端口处理 HTTP 流量。\n- 服务器监听 `443` 端口处理带 TLS 的 HTTPS 流量。\n- 使用轮询算法在两个上游服务器 `10.0.0.1:8080` 和 `10.0.0.2:8080` 之间进行负载均衡。\n\n### 2.4 代码概览\n\n- **服务器初始化**：创建并配置一个 `Server` 实例。\n- **负载均衡器**：创建一个 `LoadBalancer` 实例来管理多个上游服务器。\n- **HTTP 代理服务**：使用服务器设置和负载均衡器进行配置，并监听特定端口。\n- **TLS 设置**：配置以启用 HTTP/2 并使用指定的证书和密钥文件。\n- **服务列表**：将服务添加到服务器，服务器进入事件循环开始处理请求。\n\n### 2.5 示例用法\n\n该代理服务器设计用于将传入的 HTTP 请求转发到指定的上游服务器，使用轮询算法，并且为所有上游请求设置 `Host` 头为 `example.com`。\n\n### 2.6 备注\n\n- **SNI（服务器名称指示）**：`HttpPeer` 配置了 SNI，以确保在与上游服务器建立 TLS 连接时使用正确的主机名。\n\n## 三、贡献\n\n如果你有任何建议或改进，欢迎提交问题或拉取请求。\n\n## 四、许可证\n\n本项目使用 MIT 许可证。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphyuany%2Fsimple-pingora-reverse-proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphyuany%2Fsimple-pingora-reverse-proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphyuany%2Fsimple-pingora-reverse-proxy/lists"}