首页主机资讯如何优化centos lnmp的缓存

如何优化centos lnmp的缓存

时间2026-01-20 21:38:03发布访客分类主机资讯浏览1300
导读:CentOS LNMP 缓存优化实操指南 一 优化总览与优先级 建议按“先易后难、先快后慢”的顺序实施:先开启Nginx 浏览器与 FastCGI 缓存,再启用PHP OPcache/APCu,随后引入Redis/Memcached 数据...

CentOS LNMP 缓存优化实操指南

一 优化总览与优先级

  • 建议按“先易后难、先快后慢”的顺序实施:先开启Nginx 浏览器与 FastCGI 缓存,再启用PHP OPcache/APCu,随后引入Redis/Memcached 数据缓存,最后优化MySQL InnoDB 缓冲池与 I/O。
  • 明确缓存层级与适用对象:
    • 浏览器/网关层:静态资源长缓存、动态内容短缓存与条件请求。
    • Nginx 层:反向代理缓存(Proxy Cache)与 FastCGI 页面缓存(FastCGI Cache)。
    • PHP 层:OPcache(字节码)、APCu(用户空间)、Redis/Memcached(对象/数据)。
    • MySQL 层:InnoDB Buffer Pool(数据/索引页)、必要时配合查询/会话级缓存策略。

二 Nginx 缓存优化

  • 静态资源长期缓存(浏览器 + Nginx)
    • 对带内容哈希指纹的 JS/CSS/图片设置超长缓存,减少重复下载;对不带指纹的资源缩短缓存并配合 ETag 做条件请求。
    • 示例:
      location ~* \.(js|css)$ {
          
          expires 1y;
          
          add_header Cache-Control "public, immutable";
          
          etag on;
          
          access_log off;
      
      }
      
      location ~* \.(jpg|jpeg|png|gif|ico|svg)$ {
          
          expires 1y;
          
          add_header Cache-Control "public";
          
          access_log off;
      
      }
      
      
  • FastCGI 页面缓存(适用于直接跑 PHP 的站点)
    • 定义缓存区与路径,开启缓存键、状态头、容错与锁,避免“惊群”与雪崩。
    • 示例:
      http {
          
        fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=fcgi_cache:128m
                         max_size=10g 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-fpm.sock;
          
      
            fastcgi_cache fcgi_cache;
          
            fastcgi_cache_key "$scheme$request_method$host$request_uri$arg_v";
          
            fastcgi_cache_valid 200 302 10m;
          
            fastcgi_cache_valid 404      1m;
          
            fastcgi_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
          
            fastcgi_cache_lock on;
          
            fastcgi_cache_background_update on;
          
            add_header X-Cache-Status $upstream_cache_status;
          
            proxy_cache_bypass $http_pragma;
          
            proxy_no_cache $http_authorization;
      
          }
      
        }
      
      }
      
      
  • 反向代理缓存(若 Nginx 作为 API/上游的反向代理)
    • 示例:
      http {
          
        proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=proxy_cache:128m
                         max_size=10g inactive=60m use_temp_path=off;
      
      
        server {
      
          location / {
          
            proxy_pass http://backend;
          
            proxy_cache proxy_cache;
          
            proxy_cache_valid 200 302 10m;
          
            proxy_cache_valid 404      1m;
          
            proxy_cache_use_stale error timeout updating;
          
            proxy_cache_lock on;
          
            add_header X-Cache-Status $upstream_cache_status;
          
            proxy_cache_bypass $http_cache_control;
      
          }
      
        }
      
      }
          
      
  • 验证与清理
    • 验证:curl -I 查看响应头中的X-Cache-Status: HIT/MISS
    • 清理:Nginx 无内置按 URL 清理,可删除缓存目录文件或引入第三方模块(如ngx_cache_purge)。

三 PHP 缓存优化

  • OPcache(必开)
    • 加速 PHP 字节码执行,建议生产环境开启并合理分配内存与文件数上限。
    • 示例(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
      
  • APCu(用户空间对象缓存)
    • 缓存配置、字典、片段等用户态数据,减少数据库/计算重复开销。
    • 示例(php.ini):
      [apcu]
      extension=apcu.so
      apcu.enable=1
      apcu.shm_size=64M
      
  • Redis/Memcached(分布式数据缓存)
    • 适合热点数据、会话、计数器等;安装扩展后在业务侧“先读缓存、未命中回源并回填”。
    • 示例(安装与连接思路):
      • 安装:yum 安装 php-pecl-redis/php-pecl-memcached 与对应服务端;
      • 使用:PHP 中以Redis/Memcached客户端连接 127.0.0.1:6379/11211,设置合理 TTL 与失效策略。

四 MySQL 缓存优化

  • InnoDB 缓冲池(核心)
    • 建议设置为可用内存的50%~70%(专用库可更高),并拆分多个实例降低争用;监控命中率,目标**> 95%,优秀可达> 99%**。
    • 示例(my.cnf):
      [mysqld]
      innodb_buffer_pool_size=12G
      innodb_buffer_pool_instances=8
      innodb_buffer_pool_load_at_startup=ON
      innodb_buffer_pool_dump_at_shutdown=ON
      
  • 查询缓存
    • MySQL 8.0 已移除查询缓存(query cache),无需配置;5.7 及以下仅在“读多写少”场景谨慎评估。
  • 会话级与临时表
    • 适度增大会话级缓存(如 tmp_table_size、max_heap_table_size),避免磁盘临时表;配合索引与执行计划优化减少排序/临时表。
  • I/O 与日志(与缓存命中强相关)
    • 合理设置 innodb_log_file_size(如 256MB~2GB)innodb_flush_log_at_trx_commit(1/2/0 权衡一致性与性能)、以及 I/O 能力参数,减少磁盘瓶颈对缓存收益的影响。

五 监控与压测闭环

  • 监控与观测
    • Nginx:启用 stub_status 观测连接与请求;为站点添加 X-Cache-Status 观察命中率;必要时记录缓存命中/未命中日志用于分析。
      location /nginx_status {
          
        stub_status on;
          
        access_log off;
          
        allow 127.0.0.1;
          
        deny all;
      
      }
          
      
    • MySQL:开启慢查询日志(如 long_query_time=0.5s),利用 Performance Schema/Advisor 持续定位瓶颈与优化点。
  • 压测与验证
    • 使用 wrk 进行基线压测与回归压测,观察 Requests/sec、P95/P99 延迟、超时/错误 与缓存命中率变化,验证优化成效。
      wrk -t12 -c100 -d30s --latency http://your-domain.com/
      
  • 风险提示
    • 缓存引入“一致性”挑战:对写后读场景需设计失效/更新策略(如按业务键删除、TTL 分层、版本号/标签化)。
    • 变更前务必备份配置与数据,在灰度/低峰期逐步生效,并保留回滚方案。

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


若转载请注明出处: 如何优化centos lnmp的缓存
本文地址: https://pptw.com/jishu/787688.html
centos定时器优先级怎么设置 怎样保障centos lnmp的数据安全

游客 回复需填写必要信息