XAMPP需修改httpd.conf中Listen指令添加多端口,并启用mod_cache等模块、配置CacheRoot及缓存头,才能实现多端口本地缓存测试;关键注意模块加载顺序、路径权限、响应头控制及缓存键构成。

XAMPP 默认只监听 80 端口,想跑多个本地服务或测试缓存策略,必须改端口;而 mod_cache 在 XAMPP 中默认不启用,光改端口不加载模块,缓存压根不会工作。
怎么改 Apache 的监听端口(不止一个)
Apache 本身不支持“多端口自动分流”,但可以配置多个 Listen 指令 + 多个 块,实现不同端口走不同逻辑。常见做法是:主端口(如 8080)跑正常开发站,另一端口(如 8081)专用于带缓存的 API 测试。
- 编辑
X:\XAMPP\apache\conf\httpd.conf,找到所有Listen 80,替换成Listen 8080(避免和系统其他服务冲突) - 在文件末尾追加:
Listen 8081 <virtualhost> DocumentRoot "X:/XAMPP/htdocs/cache-test" ServerName localhost:8081 <directory> Require all granted </directory></virtualhost> - 重启 Apache 后,
http://localhost:8080和http://localhost:8081就能同时访问两个独立站点
如何启用 mod_cache 及配套模块
XAMPP 自带 mod_cache、mod_cache_disk、mod_proxy 等模块,但全部被注释掉了。不手动启用,CacheEnable 这类指令会直接报错。
- 打开
X:\XAMPP\apache\conf\httpd.conf,取消以下几行的注释(删掉开头的#):LoadModule cache_module modules/mod_cache.so LoadModule cache_disk_module modules/mod_cache_disk.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule headers_module modules/mod_headers.so
- 顺序不能错:
cache_module必须在cache_disk_module之前;proxy_module必须在proxy_http_module之前 - 确认模块已加载:命令行运行
httpd -M | findstr cache(Windows)或apachectl -M | grep cache(Linux/macOS),应看到cache_module和cache_disk_module
配置磁盘缓存并验证是否生效
mod_cache_disk 是 XAMPP 下最稳妥的缓存方式——重启不丢数据,响应体也落盘,比 mod_cache_socache 更适合本地调试。
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
- 在
httpd.conf末尾添加缓存配置(注意路径权限):CacheRoot "X:/XAMPP/apache/cache" CacheDirLevels 2 CacheDirLength 1 CacheEnable disk / CacheIgnoreCacheControl off CacheIgnoreNoLastMod off
- 手动创建目录
X:\XAMPP\apache\cache,并确保当前用户(如 Administrator)对该目录有完全控制权限 - 给后端响应加缓存头:如果用 PHP 测试,在脚本开头加
header('Cache-Control: public, max-age=60');;如果是代理 Java 接口,Java 端必须返回Cache-Control: public, max-age=300,否则mod_cache直接跳过 - 验证是否命中:用
curl -I http://localhost:8081/test.php查看响应头,出现X-Cache: HIT from localhost表示成功;同时检查X:\XAMPP\apache\cache\下是否生成了子目录和缓存文件
为什么本地缓存容易失效?关键坑点
在 XAMPP 这种单机开发环境下,mod_cache 失效往往不是配置错,而是被响应头或默认行为静默拦截。
- PHP 脚本默认输出
Cache-Control: no-cache(尤其启用了 XDebug 或某些框架),必须显式覆盖 - 任何响应中含
Set-Cookie头(比如 PHPSESSID),mod_cache_disk默认不缓存——可临时加CacheIgnoreHeaders Set-Cookie测试,但上线前务必移除 - 请求 URL 带查询参数(如
?t=123),mod_cache会把每个参数组合当独立缓存键,导致命中率暴跌;测试时建议先用固定路径 - Windows 下路径反斜杠容易引发权限问题,
CacheRoot配置里统一用正斜杠(X:/XAMPP/apache/cache)更稳
真正麻烦的是缓存键的隐式构成:它不只看 URL,还受 Host、Accept、User-Agent 等头影响;本地调试时,浏览器和 curl 的默认头差异就可能导致看似相同的请求实际没命中。










