Apache 代理缓存想上 HTTP/3?两条路:前端终结 QUIC 或换 ATS

Apache 代理缓存想上 HTTP/3?两条路:前端终结 QUIC 或换 ATS

一、先认清 httpd 的边界

mod_proxy 能做反向代理、mod_cache 能磁盘/内存缓存,但都建立在 HTTP/1.1 或 HTTP/2 的 TCP 语义上。HTTP/3 要的是 UDP、TLS 1.3 和连接迁移相关的 QUIC 状态机——这不是开一条指令能解决的。即便用事件 MPM + mod_http2,Apache 也只认 h2,不会监听 UDP 443,更不认识 HTTP/3 帧格式。

二、路线一:前端组件终结 QUIC,再回源 Apache

在 Apache 前放 Nginx 1.25+ 或 HAProxy 2.6+,由它们监听 QUIC 端口、终止 HTTP/3,再以 HTTP/1.1 或 h2 回源到 Apache(如 127.0.0.1:8080)。Apache 继续干缓存查找、写入和回源的老本行。

listen 443 quic reuseport; listen 443 ssl; http2 on;
ssl_protocols TLSv1.3;
add_header Alt-Svc 'h3=":443"; ma=86400';
location / { proxy_pass http://127.0.0.1:8080; }

好处是现有 Apache 缓存规则几乎不用改;代价是请求经历"前端 QUIC → 后端 TCP"两套传输,多一层连接处理。回源用 h2 可多路复用减队头阻塞,用 HTTP/1.1 则要保证足够的后端长连接。

三、路线二:直接迁移到 Apache Traffic Server

ATS 原生支持 HTTP/3。在 records.config 开启 QUIC 端口、配好证书后,缓存对象仍走磁盘存储,少了一次协议转换损耗,边缘直接终结 HTTP/3,首字节时间更短。

四、弱网下的取舍

0-RTT 与 QPACK 能压低首包延迟,但要处理 UDP 超时、连接迁移和缓存键一致性。参考 Evernote 等移动端在弱网中验证过的 QUIC 重传收益,边缘缓存节点可复用同一思路。