导读:本期聚焦于小伙伴创作的《如何在AlmaLinux上让Apache代理缓存支持HTTP/3 QUIC?》,敬请观看详情。想让 Apache 反向代理同时承担缓存职责并走通 HTTP/3 回源,仅靠默认的 mod_proxy 并不够。QUIC 基于 UDP,而传统 mod_proxy_http 只处理 TCP,因此必须在编译或安装时加入 mod_http3、nghttp3 与支持 QUIC 的 OpenSSL 分支。AlmaLinux 的默认仓库不一定提供完整实验模块,通常需要从源码或 EPEL、Remi 等第三方源补齐依赖。配置上要区分客户端到代理的 HTTP/3 和代理到源站的 HTTP/3:前者依赖 mod_http3 监听 UDP 443,后者则需要 mod_proxy_http2 配合实验性 QUIC 回源支持。缓存层通过 mod_cache 和 mod_cache_disk 处理,但要注意 QUIC 0-RTT 请求的缓存键一致性。文章会给出安装、编译、虚拟主机和缓存策略的完整示例,并说明如何用 curl 和 qlog 验证 UDP 流量是否真正迈过代理。

在 AlmaLinux 上把 Apache 作为反向代理缓存节点使用时,HTTP/3 并不只是打开一个模块那么简单。QUIC 跑在 UDP 之上,而 Apache 传统代理链路 mod_proxy_http 默认只处理 TCP,所以要让客户端到代理、代理到源站两条链路都具备 QUIC 能力,必须同时调整编译依赖、模块加载顺序和虚拟主机配置。客户端侧由 mod_http3 监听 UDP 443 并处理 QUIC 握手,缓存侧由 mod_cachemod_cache_disk 接管响应体,而回源侧则需要实验性的 QUIC 回源支持。下面以一个 AlmaLinux 8 或 9 环境为例,给出从依赖安装到验证的完整路径。

如何在AlmaLinux上让Apache代理缓存支持HTTP/3 QUIC?

一、HTTP/3 与 QUIC 在 Apache 中的模块关系

HTTP/3 的核心不是 HTTP/2 的简单升级,而是把传输层从 TCP 换成了基于 UDP 的 QUIC。Apache httpd 通过 mod_http3 模块处理 QUIC 连接,这个模块依赖 nghttp3 库完成 HTTP/3 帧编码,依赖 ngtcp2 和对应的加密库完成 QUIC 传输与 TLS 1.3 握手。很多发行版仓库中的 Apache 构建没有开启这些实验特性,因此即使安装了 httpd,也可能根本没有 mod_http3.so 文件。

反向代理链路则完全不同。默认的 mod_proxy_http 在回源时使用 HTTP/1.1,后来引入的 mod_proxy_http2 可以让回源走 HTTP/2,但它们都基于 TCP。Apache 社区对 QUIC 回源的支持较晚,早期版本中即使客户端到代理能跑 HTTP/3,代理回源仍然会降级为 TCP。因此部署前要认清两条链路:前端 QUIC 只需要 mod_http3,后端 QUIC 回源则取决于 mod_proxy 是否编译了 QUIC 支持,并且源站必须通过 Alt-Svc 宣告 UDP 服务。

缓存模块 mod_cache 可以缓存多条协议的响应,但缓存键默认包含协议、主机、路径和查询参数。HTTP/3 与 HTTP/2、HTTP/1.1 的响应如果内容一致,通常可以复用缓存条目;不过如果源站对 QUIC 和 TCP 返回了不同的头部,比如不同的 Alt-SvcVary 值,就会导致缓存命中率下降。因此建议在代理上规范缓存键或清理上游不一致的响应头。

二、AlmaLinux 上安装与编译 Apache QUIC 支持

AlmaLinux 的默认 BaseOS 和 AppStream 仓库一般不包含完整的 HTTP/3 模块。可以先检查当前 httpd 是否已经自带 mod_http3

httpd -M 2>/dev/null | grep -i http3
ls /etc/httpd/modules/ | grep -i http3

如果没有输出,就需要从源码构建。推荐使用 EPEL 仓库中的较新 httpd 包,或者直接拉取 Apache httpd 源码并配合 quictls/openssl 分支编译。核心依赖包括 libnghttp3libngtcp2libngtcp2_crypto_quictls 以及支持 QUIC 的 OpenSSL。下面命令演示在 AlmaLinux 上安装基础编译工具和部分依赖:

dnf install -y epel-release
dnf groupinstall -y "Development Tools"
dnf install -y 
  openssl-devel 
  libnghttp3-devel 
  libngtcp2-devel 
  libngtcp2_crypto_quictls-devel 
  nghttp2 
  brotli-devel 
  libxml2-devel 
  pcre2-devel 
  zlib-devel

如果仓库中不存在 libngtcp2 相关包,需要从源码编译这些库。编译时务必让 OpenSSL 和 ngtcp2 使用同一套加密后端,否则运行时会报握手失败。之后下载 Apache httpd 源码,进入

ApacheHTTP3QUIC修改时间:2026-08-13 04:07:55

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。