构建 HTTP 代理
Pingora 可以用来构建高性能的 HTTP/HTTPS 代理,支持请求转发、连接复用、TLS 加密和自定义过滤器。
最小可用代理示例
use pingora::prelude::*;
#[tokio::main]
async fn main() {
let mut server = Server::new(None).unwrap();
server.bootstrap();
// 构建一个简单 HTTP 代理
let app = http_proxy_service(None);
server.run_forever(app).unwrap();
}
`
执行后,你可以访问 http://127.0.0.1:8080,Pingora 会将请求转发到默认上游。
配置上游服务器
在配置文件中设置上游服务:
proxy:
upstreams:
- name: backend
servers:
- "127.0.0.1:8000"
- "127.0.0.1:8001"
Pingora 会自动进行负载均衡,将请求分发到多个上游。
自定义请求过滤器
可以在代理服务中添加自定义过滤器,处理请求和响应:
use pingora::prelude::*;
fn my_filter(req: &Request, ctx: &mut Context) -> Result<(), Error> {
println!("请求路径: {}", req.path());
Ok(())
}
let mut server = Server::new(None).unwrap();
server.bootstrap();
let mut app = http_proxy_service(None);
app.add_filter(my_filter);
server.run_forever(app).unwrap();
过滤器用途
- 请求验证(如 API Key 或 Token)
- 请求/响应日志记录
- 路由或重写 URL
- 自定义限流或安全策略
端口与监听地址
可通过配置文件或命令行参数指定:
server:
listen: "0.0.0.0:8080"
0.0.0.0表示监听所有网络接口- 端口可以自由指定,例如 8080、80 或 443(需要 root 权限)
TLS/HTTPS 支持
使用 BoringSSL 或 OpenSSL,可以启用 HTTPS:
tls:
cert: /etc/ssl/certs/server.crt
key: /etc/ssl/private/server.key
Pingora 会自动将 HTTP 请求升级到 HTTPS 并处理加密传输。
通过上述步骤,你可以快速搭建一个高性能的 HTTP/HTTPS 代理,并在此基础上添加自定义逻辑,实现复杂的请求处理与转发需求。
相关内容
- 高级主题 (WIP) 探索 Pingora 的高级特性,包括内部机制、异步运行时、线程模型和自定义扩展。
- 后台服务 学习如何在 Pingora 中配置和运行后台服务,包括定时任务、异步执行和守护进程管理。
- 异步上下文中的阻塞代码 学习如何在 Pingora 异步运行时中处理阻塞代码,确保高并发请求环境下的性能和稳定性。
- 配置文件 了解 Pingora 的配置文件结构、主要参数及其作用,学习如何为不同场景编写高效、清晰的配置。
- 连接池与复用 学习如何在 Pingora 中使用连接池和连接复用,提高代理服务的性能和资源利用率。
- 守护进程 学习如何将 Pingora 以守护进程方式运行,确保服务在后台持续运行,并与系统管理工具集成。