首页主机资讯centos lnmp缓存策略解析

centos lnmp缓存策略解析

时间2025-11-14 10:56:04发布访客分类主机资讯浏览890
导读:CentOS LNMP 缓存策略解析 一 缓存分层与适用场景 Nginx 静态资源缓存:对图片、CSS、JS等设置长期Cache‑Control/Expires,减少磁盘 I/O 与重复传输。 Nginx 反向代理/页面缓存:通过prox...

CentOS LNMP 缓存策略解析

一 缓存分层与适用场景

  • Nginx 静态资源缓存:对图片、CSS、JS等设置长期Cache‑Control/Expires,减少磁盘 I/O 与重复传输。
  • Nginx 反向代理/页面缓存:通过proxy_cache缓存后端(如 PHP‑FPM)生成的动态页面或接口,显著降低后端负载与响应时间。
  • PHP OPcache:缓存PHP 字节码,避免重复编译,提升脚本执行效率,是 LNMP 的必选项。
  • MySQL 层缓存:以InnoDB Buffer Pool为核心,配合查询缓存 Query Cache(注意:MySQL 8.0 起已移除),热点数据尽量留在内存。
  • 外部对象缓存:使用Redis/Memcached缓存数据库查询结果、会话与计算结果,适合读多写少与跨进程共享场景。

二 Nginx 缓存配置要点

  • 静态资源:在 server/location 中设置过期时间与公共缓存头,示例:
    location /static/ {
        
        alias /var/www/static/;
        
        expires 30d;
        
        add_header Cache-Control "public, immutable";
    
    }
    
    
  • 反向代理/页面缓存:在 http 块定义共享内存区与磁盘路径,在 location 启用缓存与状态头:
    http {
        
        proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m
                         max_size=1g inactive=60m use_temp_path=off;
    
    
        server {
    
            location / {
        
                proxy_pass http://127.0.0.1:8080;
        
                proxy_cache my_cache;
        
                proxy_cache_valid 200 302 10m;
        
                proxy_cache_valid 404 1m;
        
                proxy_cache_key "$scheme$proxy_host$request_uri";
        
                proxy_cache_methods GET HEAD;
        
                add_header X-Proxy-Cache $upstream_cache_status;
        
    
                # 按需绕过/不缓存
                proxy_cache_bypass $http_pragma;
        
                proxy_no_cache $http_pragma $http_authorization;
        
                proxy_cache_revalidate on;
    
            }
    
        }
    
    }
        
    
  • 关键指令说明:
    • proxy_cache_path:定义缓存目录层级、键区与容量;levels=1:2 为常见层级;inactive=60m 控制未被访问对象的回收;use_temp_path=off 减少额外拷贝。
    • proxy_cache / proxy_cache_key / proxy_cache_valid:启用缓存、定义键与不同状态码的TTL
    • proxy_cache_bypass / proxy_no_cache / proxy_cache_revalidate:实现按请求头/条件绕过、不缓存与条件 GET 重新验证

三 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=10000
    opcache.revalidate_freq=60
    opcache.fast_shutdown=1
    
    • 建议将 opcache.memory_consumption 设为可用内存的约1/8~1/4,并结合文件数调大 max_accelerated_files
  • PHP‑FPM 进程池(www.conf)与性能:
    • 合理设置 pm.max_children / pm.start_servers / pm.min_spare_servers / pm.max_spare_servers,并视内存与泄漏风险配置 pm.max_requests(如500~1000)以定期回收进程。
    • 结合 OPcache 与对象缓存(Redis/Memcached)共同减少后端计算与数据库压力。

四 MySQL 层缓存配置要点

  • InnoDB Buffer Pool(核心):将热点表/索引留在内存,建议设置为系统内存的50%~70%(如1G/2G/8G视规格而定),显著减少磁盘 I/O。
  • 查询缓存 Query Cache(已移除于MySQL 8.0):
    • 5.7 及更早版本中,可通过 query_cache_type / query_cache_size 启用;但高并发/写多场景下易成为争用点,命中率与维护成本需评估,必要时关闭。
    • 若使用 5.7,可通过状态变量评估效果:Qcache_hits / Com_select 等(命中率≥30%通常更有价值,命中/写入比≥3:1更理想)。
  • 其他:结合慢查询日志、合理索引与语句优化,必要时引入Redis/Memcached做结果集或热点数据缓存。

五 验证与运维实践

  • 生效验证:
    • 静态资源:使用 curl 检查 Cache‑Control/ExpiresAge 头。
    • 反向代理:观察响应头 X‑Proxy‑Cache: HIT/MISS/EXPIRED/UPDATING/STALE,并核对 proxy_cache_valid 的 TTL 行为。
    • PHP:确认 opcache 已加载(phpinfo/ini_get),并监控 opcache_get_status() 命中率与内存使用。
    • MySQL:在 5.7 下查看 Qcache_hits / Com_select 等指标;在 8.0 聚焦 InnoDB Buffer Pool 命中与磁盘读写。
  • 运维建议:
    • /var/cache/nginx 配置合适的磁盘空间与清理策略(如按 inactive 回收),并定期审计缓存命中与后端负载。
    • 对“不可缓存”的请求(如带AuthorizationPragma: no-cache)使用 proxy_cache_bypass / proxy_no_cache 精确控制。
    • 结合监控与日志(如 Prometheus/Grafana、Nginx/MySQL 日志)持续评估与迭代缓存策略。

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


若转载请注明出处: centos lnmp缓存策略解析
本文地址: https://pptw.com/jishu/747817.html
centos lnmp最佳实践分享 centos lamp如何更新系统补丁

游客 回复需填写必要信息