可将 apache 的 documentroot 目录挂载到 tmpfs 实现内存级静态资源服务,需配置挂载、权限、禁用 .htaccess、启用 expires 与 cache-control,并配合自动化部署保障热更新。

Apache 的 DocumentRoot 本身不直接“配合”tmpfs,但你可以把 DocumentRoot 所指向的静态资源目录,**挂载到 tmpfs(如 /dev/shm)上**,让所有静态文件物理存储在内存中。这样每次请求都走内存读取,绕过磁盘 I/O,响应时间可压至微秒级,特别适合高并发、低延迟要求的静态资源服务(如前端构建产物、图标集、版本化 JS/CSS)。
把 DocumentRoot 目录迁移到 tmpfs
核心思路是:不改 DocumentRoot 路径字符串,而是让该路径实际指向内存。例如 DocumentRoot "/var/www/html",你只需将 /var/www/html 这个目录挂载为 tmpfs,而非普通磁盘分区。
- 确认 tmpfs 可用:Ubuntu 默认已挂载 /dev/shm(通常大小为内存一半),也可自定义挂载点,如 /mnt/ramdisk
- 创建目标目录并挂载(以 /var/www/html 为例):
sudo mkdir -p /var/www/html
sudo mount -t tmpfs -o size=512M,mode=755 tmpfs /var/www/html - 写入 /etc/fstab 持久化(避免重启丢失):
tmpfs /var/www/html tmpfs size=512M,mode=755 0 0 - 首次部署时,把原始静态文件(如 build 输出)复制进去:
cp -r /path/to/dist/* /var/www/html/
确保 Apache 能安全读取 tmpfs 上的文件
tmpfs 中的文件属主和权限需与 Apache worker 进程一致(通常是 www-data 或 apache 用户),否则会报 403 Forbidden。
- 设置目录属主:
sudo chown -R www-data:www-data /var/www/html - 验证 SELinux(若启用)或 AppArmor 策略是否允许 httpd 访问 tmpfs —— 多数 Ubuntu 默认允许 /dev/shm,但自定义挂载点可能需额外规则
- 禁用 .htaccess 扫描(避免每次请求都触发 stat):
AllowOverride None
配合客户端缓存策略,形成两级加速
内存存储解决“读得快”,客户端缓存解决“不用读”。二者叠加,能让高频静态资源真正实现“零服务器压力”复访。
- 在
块中启用 mod_expires:
ExpiresActive On
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/html "access plus 0 seconds" - 补充 Cache-Control 响应头(尤其对哈希命名文件):
Header set Cache-Control "public, max-age=31536000, immutable"
热更新与运维注意事项
tmpfs 数据随重启消失,所以不能只靠挂载——需配套自动化部署流程,保证每次发布后内容能快速同步进内存。
- 推荐使用软链接 + 初始化脚本:把真实 DocumentRoot 设为 /home/wwwroot/html,再让它指向 /dev/shm/webroot;每次部署先清空 /dev/shm/webroot,再 cp 新文件,最后 touch 一个标记文件用于健康检查
- 监控 tmpfs 使用率:
df -h /var/www/html 或 find /dev/shm -xdev -type f | wc -l - 避免缓存大文件(如视频、高清图):单文件建议 ≤1MB,总容量预留 20% 余量,防止 OOM 或 swap 频繁触发











