Apache 代理缓存 HTTP/3:缓存键不变,再用 AWK 看命中率

Apache 代理缓存 HTTP/3:缓存键不变,再用 AWK 看命中率

一、QUIC 对缓存意味着什么

HTTP/3 把 TLS 1.3 内嵌进 QUIC,靠 ALPN 协商出 h3,支持连接迁移与 0-RTT。但这些不影响缓存可缓存性判断:缓存模块仍只看请求方法、URI 和响应头里的缓存控制信息。UDP 无连接特性也不会让缓存键失效。

二、配置要点

启用依赖 mod_http3、mod_proxy_http3(底层需 nghttp3/ngtcp2),缓存仍用 mod_cache + mod_cache_disk。前端监听要同时覆盖 TCP 与 UDP 443,并用 Protocols 声明 h3/h2/http1.1,且 TLS 最低 TLS 1.3。

  • 0-RTT 只对 GET/HEAD 等安全方法开放缓存组合;POST 等非幂等方法建议关 0-RTT 或强制回源,避免重放风险。
  • 后端用一条 QUIC 连接多路复用处理多请求,但要管好连接池的空闲超时与最大请求数,防止连接过早回收导致迁移后会话丢失。

三、用 AWK 看命中率

配置完成后,用访问日志做轻量统计,观察 HTTP/3 请求占比与缓存命中情况,判断 QUIC 代理缓存是否真的减少了回源:

awk '{h3+=($0 ~ /HTTP\/3/)} /HIT/{hit++} END{print "h3:",h3,"hit:",hit}' access.log

按实际日志字段调整匹配规则即可,无需重工具链。

四、排错清单

  • 握手失败 → 确认证书支持 TLS 1.3。
  • 命中低 → 查 Vary 响应头与缓存过期策略,避免每条请求都当新资源。
  • 迁移掉线 → 调大后端连接空闲超时、最大请求数。