怎么配置 Apache 实现针对移动端缓存优化

作者:袖梨 2026-07-11
Apache移动端缓存优化核心是“减体积、降请求、缩时延”,通过启用Gzip压缩文本资源、设置强缓存+immutable头、开启并调优KeepAlive,配合文件哈希命名实现高效缓存复用。

Apache 针对移动端的缓存优化,核心是“减体积、降请求、缩时延”——因为移动网络带宽波动大、RTT高、连接不稳定。重点不在单独做“移动端专用配置”,而是通过通用缓存策略+关键压缩与头部控制,让移动端体验显著提升。

启用 Gzip 压缩,优先压缩文本类资源

移动端对传输体积更敏感,压缩能直接减少加载时间。使用 mod_deflate 对 HTML、CSS、JS、JSON、XML 等文本内容启用 gzip(级别 6 是体积与 CPU 的合理平衡点):

  • 确保模块已加载:LoadModule deflate_module modules/mod_deflate.so
  • 在虚拟主机或主配置中添加:
    <IfModule mod_deflate.c>  DeflateCompressionLevel 6  AddOutputFilterByType DEFLATE text/html text/plain text/xml  AddOutputFilterByType DEFLATE text/css application/javascript  AddOutputFilterByType DEFLATE application/json application/xml application/xhtml+xml  # 针对旧版 Android/iOS 浏览器兼容性处理  BrowserMatch ^Mozilla/4 gzip-only-text/html  BrowserMatch ^Mozilla/4.0[678] no-gzip  BrowserMatch bMSIEs(7|8) !no-gzip !gzip-only-text/html</IfModule>

设置强缓存 + immutable,减少 304 验证往返

移动端频繁切换网络(Wi-Fi ↔ 4G/5G),连接重建成本高。避免每次都要发条件请求(If-None-Match / If-Modified-Since),应为静态资源设长期缓存并加 immutable 标志:

  • 启用 mod_expiresmod_headers
  • 配置示例(放在虚拟主机或目录块内):
    <IfModule mod_expires.c>  ExpiresActive On  ExpiresByType image/jpeg   "access plus 1 year"  ExpiresByType image/png    "access plus 1 year"  ExpiresByType image/webp   "access plus 1 year"  ExpiresByType text/css     "access plus 1 month"  ExpiresByType application/javascript "access plus 1 month"  ExpiresByType application/json       "access plus 0 seconds"  # API 响应不缓存</IfModule><p><IfModule mod_headers.c><FilesMatch ".(ico|jpe?g|png|webp|css|js)$">Header set Cache-Control "public, max-age=31536000, immutable"</FilesMatch></IfModule>
  • 注意:配合文件哈希命名(如 main.a1b2c3.js),才能安全使用 immutable;否则更新后用户可能无法获取新版本。

开启 KeepAlive 并调优参数,适应移动弱网

移动端 TCP 连接建立耗时长(尤其在信号边缘区域)。启用长连接可复用同一 TCP 通道加载多个资源,避免反复握手和慢启动:

  • 在主配置(httpd.confapache2.conf)中设置:
    KeepAlive OnMaxKeepAliveRequests 100KeepAliveTimeout 5
  • 建议值说明:超时设为 5 秒(非默认 15 秒),既保障复用率,又避免空闲连接长时间占用 worker;100 次请求上限适合多数移动端页面(含图片、字体、脚本等资源)。

可选:按 User-Agent 区分缓存策略(谨慎使用)

一般不推荐为不同 UA 单独配置缓存,会增加复杂度与失效难度。但若确有特殊需求(例如给老旧 Android WebView 提供降级 JS),可用 mod_rewrite + environment variables 实现差异化缓存头:

  • 示例:为 Android 4.x 以下设备禁用某些高级特性缓存
    <IfModule mod_rewrite.c>  RewriteEngine On  RewriteCond %{HTTP_USER_AGENT} "Android.*[0-3]." [NC]  RewriteRule .* - [E=MOBILE_LEGACY:1]</IfModule><p><IfModule mod_headers.c>Header set Cache-Control "public, max-age=3600" env=MOBILE_LEGACY</IfModule>
  • 仅在明确存在兼容性问题且影响用户体验时才启用,日常优化无需此步。

相关文章

精彩推荐