导读:本期聚焦于小伙伴创作的《如何在 SLES 上配置 Apache 反向代理缓存并启用 HTTP/3 QUIC?》,敬请观看详情。反向代理既要转发流量又要缓存响应,当后端切换为 HTTP/3 后,基于 TCP 的旧代理配置是否还能复用?实际上 HTTP/3 的 QUIC 传输基于 UDP,对网络层要求不同,但 HTTP 语义与缓存规则保持不变。本文以 SUSE Linux Enterprise Server 为例,说明从编译支持 mod_http3 的 Apache 到配置 mod_cache 缓存代理的完整步骤,并给出 ProxyPass 与缓存控制示例。需要重点处理 TLS 1.3 证书、UDP 443 端口开放以及 nghttp3、ngtcp2 依赖。验证时可通过 curl 的 HTTP/3 参数确认 ALPN 协商结果,同时观察缓存目录是否生成磁盘缓存条目。这套方案适合希望减少回源延迟并提升安全传输效率的内部网关或边缘节点。

反向代理承担南北向流量时,HTTP/3 带来的不仅是头部压缩和队头阻塞的改进,还要求底层传输从 TCP 切换为 UDP。Apache HTTP Server 从 2.4.53 版本开始通过 mod_http3 模块实验性支持 QUIC 和 HTTP/3,但 SLES 默认仓库中的 Apache 通常未启用该模块。因此,若要在 SLES 上实现支持 HTTP/3 的代理缓存,需要自行编译或使用第三方源,同时保留 mod_proxy 和 mod_cache 能力。下文将按依赖准备、编译配置、代理缓存启用、功能验证四个阶段展开。

如何在 SLES 上配置 Apache 反向代理缓存并启用 HTTP/3 QUIC?

一、HTTP/3 与代理缓存的交互机制

HTTP/3 使用 QUIC 作为传输层,数据包基于 UDP 发送,这与传统 HTTP/1.1 和 HTTP/2 依赖的 TCP 有本质区别。代理服务器若要在前端支持 HTTP/3,必须监听 UDP 443 端口并完成 TLS 1.3 握手。在 TLS 协商过程中,应用层协议通过 ALPN 扩展确定,服务器需要同时通告 h3、h2 和 http/1.1,以便不支持 HTTP/3 的客户端自动回退。代理缓存模块则工作在 HTTP 语义层,它关心的是请求方法、URI、Vary 头以及响应中的 Cache-Control 和 Expires 字段,这些内容不会因为传输层从 TCP 换成 UDP 而失效。

这意味着原本为 TCP 反向代理设计的缓存策略可以继续沿用,但有几个细节需要调整。例如,基于 TCP 连接四元组的日志分析和限速脚本在 HTTP/3 下会看到频繁变化的 UDP 源端口,因为 QUIC 连接迁移允许客户端更换 IP 或端口而保持会话。另外,代理服务器需要确保后端响应中的 Alt-Svc 头不会错误地引导客户端绕过代理直连后端。可以用下面的命令快速查看代理返回的协议标识头:

curl --http3 -I https://proxy.ipipp.com/

从性能角度看,HTTP/3 结合 TLS 1.3 的 0-RTT 特性,对重复请求的延迟有明显改善。当缓存命中时,代理可以直接返回本地磁盘或内存中的响应,无需向后端发起 QUIC 连接,进一步缩短首字节时间。但实验性模块在并发较高时可能存在内存占用上升的问题,生产环境需要做好压测再逐步放量。

二、SLES 上编译支持 HTTP/3 的 Apache

SLES 15 SP5 等版本的官方 apache2 包通常不包含 mod_http3,因此需要检查当前环境是否已经具备该模块。执行 apache2ctl -M | grep http3 如果没有输出,则需要准备编译环境。SUSE 的 zypper 可以安装大部分构建依赖,但 nghttp3 和 ngtcp2 这两个 HTTP/3 协议栈库往往需要从源码自行安装。先安装基础工具和 OpenSSL 开发包:

zypper install -y gcc make autoconf libtool pkg-config openssl-devel libnghttp2-devel pcre2-devel expat-devel zlib-devel

接下来从 GitHub 克隆并编译 nghttp3 和 ngtcp2。注意要保证两者版本匹配,并且安装到统一的目录,例如 /usr/local。ngtcp2 依赖 nghttp3 提供的 QPACK 编解码能力,编译顺序必须是先 nghttp3 后 ngtcp2:

git clone https://github.com/ngtcp2/nghttp3
cd nghttp3
autoreconf -i
./configure --prefix=/usr/local
make
make install

git clone https://github.com/ngtcp2/ngtcp2
cd ngtcp2
autoreconf -i
./configure --prefix=/usr/local --enable-lib-only
make
make install

依赖就绪后,下载 Apache HTTP Server 源码并编译。为了同时启用代理、缓存和 HTTP/3,需要在 configure 阶段显式加入对应开关。建议使用独立安装目录 /opt/apache24 以避免覆盖系统自带的 Apache,同时通过 --enable-so 支持动态模块加载,方便后续调整:

wget https://downloads.apache.org/httpd/httpd-2.4.62.tar.gz
tar -xzf httpd-2.4.62.tar.gz
cd httpd-2.4.62
./configure --enable-http3 --with-nghttp3=/usr/local --with-ngtcp2=/usr/local --enable-proxy --enable-cache --enable-cache-disk --enable-ssl --with-ssl=/usr --enable-so --prefix=/opt/apache24
make
make install

编译完成后,可以执行 /opt/apache24/bin/apachectl -M 查看模块列表,确认 proxy_module、cache_module、http3_module 均已出现。如果 mod_http3 未加载,检查编译日志中是否有 nghttp3/ngtcp2 相关的报错,通常是路径或版本不匹配导致。

三、配置反向代理缓存并启用 HTTP/3

在 httpd.conf 中按顺序加载模块。mod_http3 需要在 ssl_module 之后加载,因为它依赖 TLS 层的 ALPN 协商结果。常用配置如下:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
LoadModule http3_module modules/mod_http3.so
LoadModule ssl_module modules/mod_ssl.so

虚拟主机的配置需要同时声明 h2、http/1.1 和 h3 三种协议,并绑定 SSL 证书。缓存存储使用 mod_cache_disk,缓存目录需要 Apache 运行用户可写。下面是一个完整的虚拟主机示例,其中 <VirtualHost> 标签在代码块中已做转义展示:

<VirtualHost *:443>
    Protocols h2 http/1.1 h3
    SSLEngine on
    SSLCert

ApacheHTTP/3SLES_QUIC修改时间:2026-08-13 06:20:06

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