基于pingora开发的rust版反向代理

Pingap 是基于 pingora 开发的,pingora 提供了各类模块便于 rust 开发者使用,但并不方便非 rust 开发者,因此 pingap 提供了以 toml 的形式配置简单易用的反向代理,单服务支持多 location 转发,通过插件的形式支持更多的需求场景。已预编译好各架构上使用的可执行文件,在 releases 下载即可。特性如下:

  • 服务支持配置多个 Location,通过 host 与 path 筛选对应的 location,按权重逐一匹配选择
  • 支持正则形式配置重写 Path,方便应用按前缀区分转发
  • HTTP 1/2 的全链路支持,包括 h2c
  • 基于 TOML 格式的配置,配置方式非常简洁,可保存至文件或 etcd
  • 频繁更新的 Upstream 与 Location 相关配置调整准实时生效 (30 秒),其它应用配置更新后,无中断式的优雅重启程序
  • 访问日志的模板化配置,已支 30 多个相关属性的配置,可按需指定输出各种参数与指标
  • WEB 形式的管理后台界面,无需学习,简单易用
  • 开箱即用的 let's encrypttls 证书,仅需配置对应域名即可
  • 不同域名的 tls 证书可使用在同一服务端口中,按 servername 自动选择匹配证书
  • 支持各种事件的推送:lets_encrypt, backend_status, diff_config, restart 等等
  • 丰富的 http 插件:compression, static serve, limit, stats, mock, 等等
  • 提供了不同阶段的统计数据,如 upstream_connect_time, upstream_processing_time, compression_time, cache_lookup_timecache_lock_time

处理流程#

基于pingora开发的rust版反向代理

Pingap 核心部分功能主要处理以下逻辑 (由插件实现更丰富的功能):

  • 根据 path 与 host 选择对应的 location
  • location 根据配置重写 path 以及添加相应的请求头
  • 执行相应的转发中间件
  • 执行相应的响应中间件
  • 根据配置的日志格式输出对应的访问日志

开源协议#

项目已在 github 上以 Apache-2.0 开源,地址为:github.com/vicanso/pingap ,欢迎大家使用并提 issue。