首页主机资讯如何在LNMP中配置缓存策略

如何在LNMP中配置缓存策略

时间2025-11-28 19:01:03发布访客分类主机资讯浏览607
导读:LNMP缓存策略配置指南 一 整体思路与分层 建议按层级构建缓存:浏览器/网关层 → 反向代理/内容层 → 应用层(PHP) → 数据层(MySQL)。 浏览器缓存:通过 Cache-Control / Expires 控制可缓存资源(如...

LNMP缓存策略配置指南

一 整体思路与分层

  • 建议按层级构建缓存:浏览器/网关层 → 反向代理/内容层 → 应用层(PHP) → 数据层(MySQL)。
  • 浏览器缓存:通过 Cache-Control / Expires 控制可缓存资源(如图片、CSS、JS)的本地复用。
  • Nginx层:对静态资源设置长缓存;对动态内容可按需启用 FastCGI 缓存(PHP)或 proxy_cache(反向代理到上游)。
  • PHP层:启用 OPcache(字节码缓存),业务数据用 APCu(本地用户缓存)或 Redis/Memcached(分布式对象缓存)。
  • MySQL层:优先优化 InnoDB 缓冲池 等内存结构;传统 查询缓存 Query CacheMySQL 8.0 已移除,5.7 及更早版本亦因高并发写入命中率差而不推荐依赖。

二 Nginx缓存配置

  • 静态资源长缓存(示例)
    • 对不常变的资源设置长 max-age,并清空 ETag 减少 304 验证请求;使用 add_header 设置 Cache-Control
    • 建议配合文件名加版本号或 hash 实现“强缓存 + 变更即更新”。
    • 示例:
      location ~* \.(jpg|jpeg|gif|png|css|js|ico|webp|svg)$ {
          
          expires 1y;
          
          add_header Cache-Control "public, no-transform";
          
          add_header ETag "";
      
      }
      
      
  • FastCGI缓存(加速PHP,示例)
    • 在 http 块定义缓存区,在 PHP location 启用并设定有效时间、缓存键与绕过条件。
    • 示例:
      http {
          
          fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=php_cache:10m max_size=1g inactive=60m use_temp_path=off;
      
      
          server {
      
              location ~ \.php$ {
          
                  include fastcgi_params;
          
                  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          
                  fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
          
      
                  fastcgi_cache php_cache;
          
                  fastcgi_cache_valid 200 302 10m;
          
                  fastcgi_cache_valid 404 1m;
          
                  fastcgi_cache_key "$scheme$request_uri";
          
                  fastcgi_cache_methods GET HEAD;
          
      
                  # 登录、带 Authorization 等请求不命中缓存
                  fastcgi_cache_bypass $http_authorization;
          
                  fastcgi_no_cache $http_authorization;
          
      
                  add_header X-Proxy-Cache $upstream_cache_status;
      
              }
      
          }
      
      }
          
      
  • 反向代理缓存(示例)
    • 与 FastCGI 缓存类似,使用 proxy_cache_path / proxy_cache / proxy_cache_valid / proxy_cache_key 等指令;按需设置 proxy_cache_bypass / proxy_no_cache 控制不缓存场景。

三 PHP缓存配置

  • OPcache(必开)
    • 在 php.ini 启用并分配合理内存与文件数上限,减少脚本编译开销。
    • 示例:
      [opcache]
      zend_extension=opcache.so
      opcache.enable=1
      opcache.memory_consumption=128
      opcache.interned_strings_buffer=8
      opcache.max_accelerated_files=4000
      opcache.revalidate_freq=60
      opcache.fast_shutdown=1
      
  • APCu(用户数据缓存)
    • 适合缓存计算结果、配置、字典等小块数据;在 php.ini 启用并设置共享内存大小与 TTL。
    • 示例:
      [apcu]
      extension=apcu.so
      apcu.enable_cli=1
      apcu.shm_size=64M
      apcu.ttl=7200
      
  • Redis / Memcached(分布式对象缓存)
    • 安装服务端与 PHP 扩展后,在应用以 Redis/Memcached 客户端访问;适合页面片段、会话、热点数据。
    • 示例(Redis):
      $redis = new Redis();
          
      $redis->
          connect('127.0.0.1', 6379);
          
      $redis->
          set('key', 'value', 3600);
            // 缓存 1 小时
      echo $redis->
          get('key');
          
      
    • 安装扩展(Debian/Ubuntu 常见做法):sudo apt install php-redissudo apt install php-memcached

四 MySQL缓存与数据库层优化

  • InnoDB缓冲池(核心)
    • innodb_buffer_pool_size 设为可用内存的较大比例(如接近物理内存的70%,视实例角色与总内存而定),可显著提升读写性能。
    • 可按需调整实例数与日志参数(示例):
      [mysqld]
      innodb_buffer_pool_size=1G
      innodb_buffer_pool_instances=8
      innodb_log_file_size=256M
      innodb_log_buffer_size=64M
      
  • 查询缓存(历史特性)
    • 仅在 MySQL 5.7 及更早版本存在,且对写密集场景命中率差、并发争用明显;在 MySQL 8.0 已移除。不建议作为性能优化重点,优先通过 InnoDB 缓冲池与应用层缓存提升性能。

五 验证与运维要点

  • 验证缓存是否生效
    • 使用 curl -I 检查响应头:如 Cache-Control / Expires(浏览器缓存)、X-Proxy-Cache(Nginx 层命中状态:HIT/MISS/BYPASS)。
    • 示例:curl -I https://example.com/style.css
  • 日志与监控
    • 在 Nginx 日志中记录缓存命中(如添加 $upstream_cache_status),定期分析命中率与回源情况;必要时调整 keys_zone / max_size / inactive 等参数。
  • 安全与更新
    • 对含敏感信息的页面或接口设置 Cache-Control: no-store / no-cache;静态资源采用文件名加 版本号/哈希 的方式避免强缓存导致的内容滞后。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何在LNMP中配置缓存策略
本文地址: https://pptw.com/jishu/759306.html
Linux LNMP如何实现故障排查 Linux LNMP安全防护措施有哪些

游客 回复需填写必要信息