温馨提示×

centos apache2缓存优化方法

小樊
42
2026-01-02 04:24:27
栏目: 智能运维

CentOS 上 Apache 缓存优化实用指南

一 核心思路与模块

  • 浏览器缓存:通过 mod_expires 设置资源的 Cache-Control/Expires,让浏览器长期复用静态资源。
  • 服务器端缓存:通过 mod_cache + mod_cache_disk 将可缓存的响应落到磁盘,降低后端负载。
  • 内存文件缓存:对极少变动且热点文件,用 mod_file_cache 将文件句柄/内容常驻内存。
  • 压缩传输:启用 mod_deflate 减少传输体积,常与缓存配合使用。
  • 连接复用:开启 KeepAlive 减少 TCP 握手开销,提升并发效率。
    以上模块在 CentOS 的 httpd 中均可用,按需启用即可。

二 配置步骤

  • 启用必要模块(示例为在配置中显式加载;若已静态编译或已包含可跳过)
    • 模块加载(/etc/httpd/conf/httpd.conf 或 /etc/httpd/conf.modules.d/*.conf)
      • LoadModule cache_module modules/mod_cache.so
      • LoadModule cache_disk_module modules/mod_cache_disk.so
      • LoadModule expires_module modules/mod_expires.so
      • LoadModule deflate_module modules/mod_deflate.so
      • LoadModule headers_module modules/mod_headers.so
      • LoadModule file_cache_module modules/mod_file_cache.so
    • 目录与权限
      • mkdir -p /var/cache/apache2/mod_cache_disk
      • chown -R apache:apache /var/cache/apache2
  • 浏览器缓存(mod_expires)
    • 建议对静态资源设置较长缓存,对 HTML 设置较短或协商缓存;示例:
      <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresByType image/jpg  "access plus 1 year"
        ExpiresByType image/jpeg "access plus 1 year"
        ExpiresByType image/png  "access plus 1 year"
        ExpiresByType image/gif  "access plus 1 year"
        ExpiresByType text/css  "access plus 30 days"
        ExpiresByType application/javascript "access plus 30 days"
        ExpiresByType text/html "access plus 1 hour"
        ExpiresDefault "access plus 1 day"
      </IfModule>
      
  • 服务器端磁盘缓存(mod_cache_disk)
    • 为可缓存内容开启磁盘缓存;对含用户身份信息的响应应跳过缓存(如 Set-Cookie)。
      <IfModule mod_cache.c>
        <IfModule mod_cache_disk.c>
          CacheRoot "/var/cache/apache2/mod_cache_disk"
          CacheEnable disk  /
          CacheDirLevels 2
          CacheDirLength 1
          CacheDefaultExpire 3600
          CacheMaxExpire 86400
          CacheIgnoreHeaders Set-Cookie
        </IfModule>
      </IfModule>
      
  • 内存文件缓存(mod_file_cache,热点小文件)
    • 适合体积不大、极少变更且高命中的文件(如首页、关键 JS/CSS)。
      LoadModule file_cache_module modules/mod_file_cache.so
      CacheFile /var/www/html/index.html
      CacheFile /var/www/html/static/js/app.min.js
      
  • 压缩与连接复用
    • 压缩文本类资源:
      <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
      </IfModule>
      
    • 复用连接(高并发推荐):
      KeepAlive On
      MaxKeepAliveRequests 100
      KeepAliveTimeout 5
      
  • 可选:为静态资源补充 Cache-Control 公共缓存头
    <IfModule mod_headers.c>
      Header set Cache-Control "public, max-age=31536000" env=!no-cache
    </IfModule>
    
  • 生效配置
    • 检查语法:httpd -t
    • 重启服务:systemctl restart httpd。

三 验证与监控

  • 响应头检查
    • curl -I https://your-domain/static/app.js
    • 关注:Cache-Control、Expires、Age(命中时 Age>0)、Vary 等字段。
  • 命中与清理
    • 观察 Age 是否递增;变更内容后可临时停用/清理缓存或调整 URL 版本化(如带 ?v= 或文件名哈希)。
  • 日志与资源
    • 适度降低日志级别(如 LogLevel warn)减少 I/O;监控磁盘空间(CacheRoot 所在分区)与命中率趋势。

四 进阶与注意事项

  • 动态内容缓存策略
    • 对登录态、个性化、频繁变更接口不要开启磁盘缓存;必要时只对公开、可重用的片段做缓存,或使用反向代理层做更细粒度策略。
  • 反向代理缓存
    • 高并发/大流量可叠加 Varnish 或 CDN,Apache 作为源站,缓存命中在代理层完成,进一步降低源站压力。
  • MPM 与并发
    • 高并发场景优先使用 event/worker MPM,并配合 KeepAlive、缓存与压缩共同提升吞吐;切换 MPM 后需按内存与并发目标调参并充分压测。
  • 安全与合规
    • 含敏感信息的响应务必设置合适的 Cache-Control(如 private、no-store);对版本化静态资源使用长期 max-age 并配合构建产物哈希,避免强缓存导致更新不及时。

0