用CMake统一构建支持HTTP/3的Apache反向代理缓存
一、先理清模块关系
HTTP/3 跑在 QUIC(UDP)上,Apache 需要两层协议库:ngtcp2 负责 QUIC 传输层,nghttp3 负责 HTTP/3 帧编码。再加上 mod_http3 把二者接进 Apache 事件 MPM。要做反向代理和缓存,还需 mod_proxy、mod_proxy_http、mod_cache、mod_cache_disk。注意 mod_http3 必须与 mod_http2 共存,因为握手依赖 TLS 协商。
二、装好编译依赖
Ubuntu/Debian 下先装基础工具链与库:
sudo apt install -y build-essential cmake ninja-build libssl-dev libnghttp3-dev libngtcp2-dev libapr1-dev libaprutil1-dev libpcre2-dev
发行版仓库里的 nghttp3/ngtcp2 可能偏旧,若要匹配 Apache 要求的最低版本,建议从 GitHub 拉官方源码、用 CMake 单独构建,统一装到 /opt/quic,方便后续定位。
三、用 CMake 当外层调度
Apache 官方用 autotools,但这不妨碍用 CMake 的 ExternalProject_Add 把 ngtcp2、nghttp3、httpd 三个外部项目编排在一起,靠依赖顺序控制构建,并统一输出目录:
cmake_minimum_required(VERSION 3.20)
project(apache_h3_proxy LANGUAGES C)
include(ExternalProject)
set(INSTALL_PREFIX ${CMAKE_BINARY_DIR}/dist)
ExternalProject_Add(ngtcp2 SOURCE_DIR .../ngtcp2 CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX})
核心思路:CMake 负责设环境变量、传编译选项、收口安装前缀,三个组件按依赖顺序依次编译。
四、反向代理与磁盘缓存配置
编译完成后,在 Apache 配置里启用代理与缓存模块,用 ProxyPass 转发后端,用 CacheRoot + mod_cache_disk 落地磁盘缓存。这样重复请求直接命中缓存,源站压力明显下降。
五、排查要点
- 启动报缺模块 → 确认 ngtcp2/nghttp3 版本达标,且装在 Apache 能找到的前缀下。
- 握手失败 → QUIC 强制 TLS 1.3,旧 TLS 配置会让连接直接失败。
- 缓存不命中 → 检查缓存键是否含必要请求头,避免每条请求都当成新资源。
猜你喜欢
YOU LIKE- 选股工具怎么挑?功能、数据、风险提示三看
- 什么是银行“托管”?普通人间接受益在哪
- OpenAI 智能体在隔离测试里「隔空传信」:AI 隔离到底难在哪
- 卫生间到底要留多大:洁具尺寸、走道余量、换气量一次算清
- 花的 8 个英语词:blossom 不只是"开花"
- 春招焦虑自救:4个方法把心态稳下来
- 通州区搬家多少钱?价格与进城避堵全攻略
- 2026 年项目管理工具怎么选:六款主流工具对应六类场景
- 户外区域 8 个英语词:balcony、porch、patio 差在哪
- 实习生个人工作计划怎么写?结构模板与要点
- AI 在电脑里替你做细胞实验:准确率 60% 意味着什么
- 平安银行卡没加挂口袋银行,怎么绑定助学贷款(三步)
- 血红蛋白是什么:正常范围多少、偏低偏高各说明什么
- 恶意软件到底是什么?普通人防身先看这篇
- 三天做出一个 AI 产品:黑客松里跑出来的三个思路,比作品本身更值钱
- 长焦摄影手机怎么选:四款「打鸟神器」按需求对号入座
- NSK 滚珠丝杠代理怎么选?资质、库存深度与售后响应的避坑比较
- 有既往症还能投保并获得赔付吗?6类疾病的条件写在这里
