协议在入口终止
HTTP/1.1、HTTP/2(TLS 与 h2c)、HTTP/3 over QUIC、WebSocket Upgrade,同一个端口按 ALPN 分流;L4 另有 SNI 预读、TCP 隧道和 UDP 会话。
ONRouter
GENERAL-PURPOSE GATEWAY · RUST
ONRouter 是用 Rust 从零实现的通用网关。TLS、反向代理、响应缓存、Lua 与 WASM 脚本、TCP/UDP 转发——不拼装中间件,不依赖外部运行时,一个二进制跑起来。
01 / RUNTIME
从 TLS 终止到上游连接,全部在同一个进程里完成。没有反向代理链,没有跨进程队列,也没有需要单独部署的脚本运行时。
HTTP/1.1、HTTP/2(TLS 与 h2c)、HTTP/3 over QUIC、WebSocket Upgrade,同一个端口按 ALPN 分流;L4 另有 SNI 预读、TCP 隧道和 UDP 会话。
加权轮询、least_conn、ip_hash;被动健康检查、懒重连、熔断、keepalive 连接池,以及 TLS / mTLS 上游。
命名缓存区、可选的磁盘冷层与 TinyLFU 学习准入、ETag / Last-Modified 复验证、请求合并、过期兜底;每个响应都能看到命中状态。
02 / SCRIPTING
Lua 5.4 在每个请求阶段可用:access、rewrite、content、header_filter、body_filter。共享字典、定时器、cosocket、子请求和 resty.* 模块都是内建的;需要强隔离的第三方逻辑放进 WASM,燃料和内存都有上限。
ngx.* 请求、响应、变量与日志# 在 access 阶段做鉴权,失败直接结束请求
access_by_lua_block {
local auth = ngx.var.http_authorization
if auth ~= "Bearer demo" then
return ngx.exit(401)
end
}
# content 阶段读写共享字典
location = /count {
content_by_lua_block {
local cache = ngx.shared.hits
local n = cache:incr("n", 1, 0)
ngx.say("hits=", n)
}
}
03 / CONFIG
配置沿用 nginx 风格的语法,现有习惯可以直接迁移。上游、缓存区、路由、限流和脚本都在同一个文件里;改完先跑 -t,再热重载。
运行中的进程支持 SIGHUP 换路由、Lua 和证书,新连接不受影响;只有新增监听端口需要重启。
proxy_cache_path /var/cache/onrouter
keys_zone=api:32m;
upstream app_pool {
least_conn;
server 10.0.0.11:8080;
server 10.0.0.12:8080;
}
server {
listen 443 ssl;
http2 on;
server_name example.com;
location /api/ {
proxy_pass http://app_pool/;
proxy_cache api;
proxy_set_header Host $host;
}
location / {
root /srv/www;
index index.html;
}
}
04 / LEARNING
一层可选的在线学习:TinyLFU 草图决定谁值得留在缓存里,每个 key 的已完成突发决定它能排多深,客户端信誉只从限流器已有的裁决里累积。默认关闭;打开后三张表共用一份可配置的字节账本。
proxy_cache_learning:一次性 URL 的扫描,挤不掉热点对象limit_req_learning:深度在 [depth_min, depth] 里按突发形状伸缩vip_learning:信誉只换排队与驻留,不换速率,也不跳过准入没有外部模型、后台训练线程或跨进程状态;老化跟着写入与沉默走,热重载不会重启模型,配置没变时学到的状态原地保留。默认预算 1 MiB,实际占用在指标里能对上字节数。
学习层只改准入、排队与驻留;TTL、复验证和速率上限仍按配置执行。
learning on;
learning_memory_budget 1m;
# 热度赢过最老的 8 个条目,才允许占位
proxy_cache_learning api sketch=64k;
# 每个 key 的突发形状,决定它能排多深
limit_req_queue api depth=32 depth_min=4;
limit_req_learning api table=16k;
# 信誉只来自限流器已经看到的裁决
vip_learning table=16k min=10 decay=30s;
05 / OPERATIONS
没有要跟着升级的运行时,没有要拼接的模块。部署是一个二进制,观测、重载和停机都在进程内完成。
-t 检查监听、证书、缓存区和指令引用,把被忽略的写法逐条列出来;退出码不代替告警。
SIGHUP 替换路由、脚本与证书;reload 2s; 还能盯住配置文件变化,自动完成同一件事。
Prometheus 指标覆盖进程、上游、缓存、限流与 TLS;访问日志带 upstream 地址、状态和分段耗时。
06 / DOCS
使用教程、运维手册、Lua API、能力矩阵、可运行示例和安全模型都和源码放在同一个仓库,按版本一起更新。下面每一条都指向仓库里的原文,不另存一份会过期的副本。
07 / DOWNLOAD
最新构建发布在 GitHub Releases:Linux、macOS、Windows 共 8 个平台,每个版本附带 SHA256SUMS.txt。