温馨提示×

ubuntu lamp缓存机制如何配置

小樊
44
2025-12-31 22:12:57
栏目: 智能运维

Ubuntu LAMP 缓存机制配置指南

一 架构与总体思路

  • 分层缓存能最大化性能:浏览器/网关层(HTTP 缓存与反向代理)→ Web 服务器层(Apache 缓存)→ 语言运行时层(PHP OPcache/APCu)→ 数据层(MySQL InnoDB 缓冲池等)。
  • 建议优先启用OPcache(必选),再按场景叠加APCu/Memcached/Redis(应用数据缓存),静态资源开启浏览器与Apache缓存,高并发或整站加速可加Varnish/CDN

二 Apache HTTP 服务器缓存

  • 启用模块与基础配置
    • 安装并启用模块(Ubuntu 20.04/22.04/24.04 通常已内置,可直接启用):
      • sudo a2enmod cache
      • sudo a2enmod cache_disk
      • sudo a2enmod expires
    • 在虚拟主机或全局配置中加入(示例对静态资源开启磁盘缓存与过期头):
      <IfModule mod_cache.c>
        <IfModule mod_cache_disk.c>
          CacheEnable disk /static/
          CacheRoot /var/cache/apache2/mod_cache_disk
          CacheDirLevels 2
          CacheDirLength 1
          CacheDefaultExpire 3600
          CacheMaxExpire 86400
          CacheIgnoreHeaders Set-Cookie
        </IfModule>
      </IfModule>
      
      <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresByType text/css        "access plus 1 year"
        ExpiresByType application/javascript "access plus 1 year"
        ExpiresByType image/jpeg      "access plus 1 year"
        ExpiresByType image/png       "access plus 1 year"
        ExpiresByType image/svg+xml   "access plus 1 year"
        ExpiresByType font/woff2      "access plus 1 year"
      </IfModule>
      
    • 说明:将/static/替换为你的静态资源路径;对含会话或隐私页面不要开启磁盘缓存(可用 SetEnv/条件判断排除)。修改后执行:sudo systemctl restart apache2。

三 PHP 运行时缓存

  • OPcache(必选,加速字节码执行)

    • 安装与启用(PHP 7.x/8.x 通常内置 OPcache 包):
      • sudo apt install php-opcache
    • 推荐配置(/etc/php/7.x/apache2/php.ini 或 fpm 对应 ini):
      [opcache]
      zend_extension=opcache.so
      opcache.enable=1
      opcache.memory_consumption=128
      opcache.interned_strings_buffer=8
      opcache.max_accelerated_files=10000
      opcache.revalidate_freq=60
      opcache.fast_shutdown=1
      opcache.enable_cli=0   ; 生产环境建议关闭 CLI,避免开发/CLI 干扰
      
    • 重启服务:sudo systemctl restart apache2 或 sudo systemctl restart php7.x-fpm。
  • APCu(用户空间对象缓存,适合单机数据缓存)

    • 安装与启用:
      • sudo apt install php-apcu
    • 配置示例:
      [apcu]
      extension=apcu.so
      apcu.enable=1
      apcu.shm_size=64M
      apcu.ttl=7200
      apcu.enable_cli=0
      
    • 重启服务生效。
  • Memcached/Redis(分布式/复杂对象缓存,二选一或并用)

    • Memcached:
      • sudo apt install memcached php-memcached
      • 在 php.ini 加入:extension=memcached.so
    • Redis:
      • sudo apt install redis-server php-redis
      • 在 php.ini 加入:extension=redis.so
    • 应用侧按需使用(示例思路):数据库查询结果、页面片段、会话存储(建议 Redis)。

四 MySQL/MariaDB 层缓存

  • InnoDB 缓冲池(核心,优先调大)

    • 建议设置为可用内存的50%–70%(留出 OS 与其他服务内存),示例:
      [mysqld]
      innodb_buffer_pool_size=2G
      innodb_buffer_pool_instances=8
      innodb_log_file_size=256M
      
    • 修改后重启 MySQL,并监控命中率与缓冲池使用情况。
  • 查询缓存说明

    • MySQL 5.7.20 起弃用8.0 已移除查询缓存;如使用 5.7 及以下版本可在 [mysqld] 中设置 query_cache_type/size 做对比测试,但在生产更推荐依赖 InnoDB 缓冲池与应用层缓存。
  • MyISAM 键缓存(如仍使用 MyISAM)

    • 可适度设置 key_buffer_size(例如 128M–512M 视数据而定),并注意其为每个会话分配的内存项(如 sort_buffer_size、read_buffer_size 等)不宜过大,避免并发内存膨胀。

五 前端与全站加速

  • Varnish 反向代理缓存(示例)

    • 安装:sudo apt install varnish
    • 基本 VCL(/etc/varnish/default.vcl)示例:
      backend default {
        .host = "127.0.0.1";
        .port = "80";
      }
      
      sub vcl_recv {
        if (req.http.Cookie ~ "PHPSESSID" || req.http.Authorization) {
          return (pass);
        }
        return (hash);
      }
      
      sub vcl_backend_response {
        set beresp.ttl = 300s;
        return (deliver);
      }
      
    • 启动与端口:默认监听 6081,可通过 systemd 或 varnishd 参数调整;将 Web 服务器端口改为 8080,Varnish 前置监听 80。
  • CDN 与浏览器缓存

    • 图片/CSS/JS/字体设置长期 Cache-Control(如一年),并配合文件名哈希查询字符串版本解决更新问题;静态资源优先走 CDN 与浏览器强缓存。

六 验证与运维要点

  • 验证方法

    • Apache:curl -I https://your-domain/static/app.js 查看 Cache-Control/Expires;检查 Apache 配置语法 sudo apachectl configtest。
    • OPcache:php -r “print_r(opcache_get_status(true));” 查看命中率与内存使用;生产建议关闭 CLI 模式以免影响统计。
    • MySQL:SHOW ENGINE INNODB STATUS\G 与 performance_schema 观察缓冲池命中与读写情况;必要时用监控工具持续跟踪。
  • 安全与注意事项

    • Cookie/认证/个性化的页面不要进入磁盘或代理缓存;对动态内容使用 Vary: Cookie, Accept-Encoding 等策略精细控制。
    • 变更配置务必先备份并按序重启(先数据库,再缓存服务,最后 Web 服务),变更后持续观察错误日志与性能指标。

0