mod_file_cache不是内容缓存,而是将文件i/o提前至服务器启动时执行,仅适用于极少变动的静态文件;不支持动态脚本、代理响应、特殊handler资源及频繁更新文件,且文件变更后无法自动感知,易返回过期或损坏内容。

mod_file_cache 不是内容缓存,而是提前打开文件或映射进内存,把 I/O 操作从请求时挪到服务器启动时。它只对极少变动的静态文件有效,用错反而会让网站返回旧内容或出错。
明确适用场景和限制
这个模块只适用于 Apache 直接服务的普通静态文件(如 HTML、CSS、JS、图片),不支持:
- CGI、PHP、Python 等动态脚本
- 经 mod_proxy 转发的后端响应
- 由特殊 handler 处理的资源(比如通过 AddHandler 配置的类型)
- 频繁更新的文件(比如日志页、实时状态页)
一旦文件在运行中被替换或重命名,Apache 不会自动感知——它仍用启动时打开的老句柄或 mmap 区域,可能返回过期甚至损坏的内容。
两种配置方式:CacheFile 和 MMapFile
两者都写在主配置(httpd.conf 或 apache2.conf)的全局段,不能放在 VirtualHost 或 Directory 内:
- CacheFile:让 Apache 启动时就 open() 文件,后续请求复用该文件描述符。适合小文件、系统 mmap 支持弱(如 Windows)或文件数量多但单个不大时。
- MMapFile:调用 mmap() 把整个文件映射进进程虚拟内存。适合大文件、读取密集、且系统支持 mmap 的 Unix/Linux 环境。
示例配置:
一款AI开发辅助工具,主要用于通过后台进程将编码任务委托给 Codex、Claude Code 或 Pi 智能体。适用场景:(1)构建或创建新功能/应用,(2)审查 PR,适合需要提升相关任务效率的用户。
CacheFile /var/www/html/favicon.ico CacheFile /var/www/html/index.html MMapFile /var/www/html/main.css MMapFile /var/www/html/app.js
注意:平台不一定都支持 MMapFile(例如 Windows 不支持);若指令不被识别,Apache 会启动但不缓存,错误日志里会有提示。
必须配合其他设置才能真正提效
单独启用 mod_file_cache 效果有限,需搭配以下几项:
- 确保 sendfile on 开启(Linux/Unix),让内核直接传输文件数据,避免用户态拷贝
- 静态资源尽量用前缀 location(如
location /static/),避免正则匹配带来的路径解析开销 - 禁用不必要的模块(如 mod_cgi、mod_perl),减少每个请求的模块遍历成本
- 若站点是 SPA(如 Vue/React),配合
try_files $uri /index.html,可让 index.html 被高频访问,此时 CacheFile 效果最明显
替代方案更推荐:open_file_cache(Nginx)或 mod_cache + mod_disk_cache(Apache)
mod_file_cache 是静态、手动、易出错的缓存方式。现代部署中更常用:
- Nginx 的 open_file_cache:自动缓存文件元信息(存在性、大小、mtime、权限、fd),无需手动列文件,支持自动失效校验
- Apache 的 mod_cache + mod_disk_cache:按 HTTP 缓存头智能缓存响应体,支持过期控制、条件请求(ETag/Last-Modified)、后台刷新等,更适合生产环境
除非你有极低延迟要求、极稳定文件集、且能严格管控部署流程,否则优先考虑这些更健壮的机制。










