Apache通过SSLProxyCheckPeerExpire on(需配合SSLProxyVerify require等)校验后端证书有效期,防止代理因证书过期失效;同时用mod_expires设置响应缓存头,控制客户端缓存时效,二者分别管理传输层安全过期与浏览器缓存过期。

Apache 本身不直接管理后端应用数据的“逻辑过期”(比如数据库记录或缓存条目生命周期),但它可通过反向代理机制,在传输层和缓存层协同控制后端资源的可见性与有效性,实现面向客户端的自动过期管理。关键在于区分两类场景:代理连接的安全校验过期 和 静态/动态响应的浏览器缓存过期。二者目标不同,配置方式也完全不同。
一、防止代理因后端证书过期而失效
这是最常被忽略的“过期风险”——后端 HTTPS 服务证书一旦到期,Apache 若不主动拦截,可能继续转发请求,导致用户看到空白页或 502 错误,甚至绕过安全校验。
必须组合启用以下指令(写入 <VirtualHost *:443> 块中):
- SSLProxyEngine on —— 启用代理模式下的 TLS 客户端能力
- SSLProxyVerify require —— 强制验证证书链、签名、域名匹配及有效期(是前提)
- SSLProxyCheckPeerExpire on —— 显式启用有效期检查(仅在此前提下生效)
-
SSLProxyCheckPeerName on —— 确保证书 SAN 匹配
ProxyPass目标域名,避免误判 - SSLProxyCACertificateFile /path/to/ca-bundle.crt —— 提供可信 CA 列表,否则握手失败
✅ 效果:Apache 在 TLS 握手阶段就拒绝已过期或未生效的后端证书,返回 502 并记录 Peer certificate has expired。注意系统时间偏差超过 ±5 分钟也会触发该错误,需同步 NTP。
二、控制客户端对代理响应的缓存有效期
当 Apache 直接提供静态资源(如 JS/CSS/图片),或作为反向代理但选择重写响应头时,可用 mod_expires 设置浏览器缓存策略。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
先确保模块已加载:LoadModule expires_module modules/mod_expires.so
典型配置示例:
- ExpiresActive On —— 开启缓存头生成(必须开启才生效)
- ExpiresByType text/css "access plus 1 month" —— CSS 文件从访问起缓存 30 天
- ExpiresByType image/png "access plus 1 year" —— PNG 图片缓存 1 年
- ExpiresDefault "access plus 2 days" —— 其他类型默认缓存 2 天
⚠️ 注意:此配置仅影响 Apache 自己响应的资源。若请求经 ProxyPass 转发给后端 Java/Tomcat 服务,Apache 默认不修改其响应头;需在后端代码中设置 Cache-Control 或启用 mod_headers 手动注入。
三、配合后端实现逻辑过期的间接支持
Apache 无法直接干预后端业务数据的 TTL(如 Geode 或 Cassandra 的条目过期),但可辅助其生效:
- 通过
ProxyPassReverse正确改写后端返回的Cache-Control或Expires头,确保客户端收到真实策略 - 利用
mod_headers添加或覆盖响应头,例如强制为 API 接口添加Cache-Control: no-store防止敏感数据缓存 - 结合 APISIX 等现代网关(非原生 Apache)可实现路由级 TTL、令牌级 TTL 等更细粒度控制
不复杂但容易忽略:真正的“资源过期”永远由业务逻辑定义,Apache 的角色是准确传递、严格校验、合理缓存——把边界守好,就是最好的自动管理。

















