教程 pingora tutorial

构建 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 代理,并在此基础上添加自定义逻辑,实现复杂的请求处理与转发需求。