主题
构建 HTTP 代理
Pingora 可以用来构建高性能的 HTTP/HTTPS 代理,支持请求转发、连接复用、TLS 加密和自定义过滤器。
最小可用代理示例
rust
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 会将请求转发到默认上游。
配置上游服务器
在配置文件中设置上游服务:
yaml
proxy:
upstreams:
- name: backend
servers:
- "127.0.0.1:8000"
- "127.0.0.1:8001"
Pingora 会自动进行负载均衡,将请求分发到多个上游。
自定义请求过滤器
可以在代理服务中添加自定义过滤器,处理请求和响应:
rust
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
- 自定义限流或安全策略
端口与监听地址
可通过配置文件或命令行参数指定:
yaml
server:
listen: "0.0.0.0:8080"
0.0.0.0
表示监听所有网络接口- 端口可以自由指定,例如 8080、80 或 443(需要 root 权限)
TLS/HTTPS 支持
使用 BoringSSL 或 OpenSSL,可以启用 HTTPS:
yaml
tls:
cert: /etc/ssl/certs/server.crt
key: /etc/ssl/private/server.key
Pingora 会自动将 HTTP 请求升级到 HTTPS 并处理加密传输。
通过上述步骤,你可以快速搭建一个高性能的 HTTP/HTTPS 代理,并在此基础上添加自定义逻辑,实现复杂的请求处理与转发需求。