Pingap 是基于pingora开发的,pingora 提供了各类模块便于 rust 开发者使用,但并不方便非 rust 开发者使用,因此 pingap 提供了以 toml 的形式配置简单易用的反向代理,实现支持多 location 代理转发。特性如下:
Pingap 支持两种特别的服务类型,以及常规的反向代理服,具体如下:
Stats
: 获取 Server 所对应的性能指标Admin
: 根据启动时指定的 admin 地址或者配置的admin path
转发至对应的管理后台服务其它
: 常规的反向代理服务,根据域名与路径选择对应的转发节点graph TD;
start("新的请求")-->ServiceFilter{{请求服务筛选}};
ServiceFilter--是否匹配 stats-->stats 的处理;
ServiceFilter--是否匹配 admin-->admin 的处理;
ServiceFilter--根据 host 与 path 选择对应的 Location-->Location 筛选处理;
该 Server 下的所有 location 在初始化时根据权重按高至低排序,接受到请求时按顺序一个个匹配到符合的 location 为止,若无符合的则返回出错。根据符合的 location 重写 path(若无则不需要),添加请求头(若无则不需要),成功响应时添加响应头(若无则不需要)。
let header = session.req_header_mut();
let path = header.uri.path();
let host = header.uri.host().unwrap_or_default();
let (location_index, lo) = self
.locations
.iter()
.enumerate()
.find(|(_, item)| item.matched(host, path))
.ok_or_else(|| pingora::Error::new_str(LOCATION_NOT_FOUND))?;
Upstream 现支持三种类型,包括静态目录
,Mock 响应
以及常规的反向代理节点
。upstream 的处理比较简单,大概如下:
静态目录
: 读取对应的静态文件响应,需要注意静态文件是以 chunked 的形式返回Mock 响应
: 用于针对部分响应临时 mock 处理,主要用于临时的应急处理或测试反向代理节点
: 根据各节点的健康情况以及选择算法,选择对应的节点转发请求这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.