LNMP服务器如何配置缓存策略
导读:LNMP缓存策略实战指南 一 整体思路与分层缓存 建议采用分层缓存:浏览器缓存 → Nginx(静态资源与反向代理/动态内容) → PHP(OPcache、APCu) → 外部对象缓存(Redis/Memcached) → MySQL(I...
LNMP缓存策略实战指南
一 整体思路与分层缓存
- 建议采用分层缓存:浏览器缓存 → Nginx(静态资源与反向代理/动态内容) → PHP(OPcache、APCu) → 外部对象缓存(Redis/Memcached) → MySQL(InnoDB缓冲池等)。
- 浏览器缓存通过 Cache-Control / Expires 控制;Nginx 侧可用 proxy_cache / fastcgi_cache 做页面与接口加速;PHP 侧用 OPcache 加速字节码、APCu 做用户态数据缓存;数据库以 InnoDB Buffer Pool 为主,MySQL 8.0+ 已移除查询缓存,需用应用层缓存替代。
二 Nginx缓存配置
-
静态资源与浏览器缓存
- 对图片、CSS、JS、字体等设置较长缓存,并标记不可被中间代理篡改:
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ { expires 1y; add_header Cache-Control "public, immutable"; add_header Vary Accept-Encoding; } - 对需要实时性的资源(如 HTML、登录后页面)禁用或缩短缓存:
location ~ \.php$ { add_header Cache-Control "no-cache, must-revalidate"; expires off; } - 使用 add_header / expires 可精确控制 Cache-Control 与 Expires 头,满足不同资源粒度的缓存策略。
- 对图片、CSS、JS、字体等设置较长缓存,并标记不可被中间代理篡改:
-
反向代理缓存 Proxy Cache(适用于 Nginx 作为反向代理/负载均衡)
http { proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=backend_cache:10m max_size=10g inactive=60m use_temp_path=off; server { location / { proxy_pass http://backend; proxy_cache backend_cache; proxy_cache_key "$scheme$proxy_host$request_uri"; proxy_cache_valid 200 304 12h; proxy_cache_valid 301 302 1h; proxy_cache_valid any 1m; proxy_cache_use_stale error timeout invalid_header http_500; proxy_cache_min_uses 1; proxy_no_cache $cookie_nocache $arg_nocache $arg_comment; add_header X-Proxy-Cache $upstream_cache_status; } } }- 关键指令说明:
- proxy_cache_path:定义缓存目录、层级、共享内存区与容量上限。
- proxy_cache / proxy_cache_key:启用缓存与缓存键(可按业务加入 Cookie 区分)。
- proxy_cache_valid:对不同状态码设置有效期。
- proxy_cache_use_stale:在后端异常时提供过期内容,提升可用性。
- proxy_no_cache / proxy_cache_min_uses:控制哪些请求不缓存与最少访问次数再缓存。
- 关键指令说明:
-
FastCGI缓存 FastCGI Cache(适用于 PHP-FPM 动态页面)
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_use_stale error timeout invalid_header http_500; fastcgi_cache_min_uses 1; fastcgi_cache_bypass $cookie_nocache $arg_nocache; add_header X-FastCGI-Cache $upstream_cache_status; } } }- 要点:为动态内容设置合理 fastcgi_cache_valid;对带身份态或隐私页面使用 fastcgi_cache_bypass / fastcgi_no_cache 跳过缓存;通过 X-FastCGI-Cache 观察命中状态。
三 PHP缓存配置
-
OPcache(字节码缓存,建议默认开启)
[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- 作用:减少 PHP 脚本解析与编译开销,显著提升响应速度。
-
APCu(用户态数据缓存,适合片段/配置/计数器等)
[apcu] extension=apcu.so apcu.enable=1 apcu.shm_size=64M apcu.ttl=7200- 作用:在进程内缓存计算结果、配置与临时数据,降低数据库与后端压力。
-
Redis / Memcached(对象缓存,适合热点数据与会话)
- 安装与启用:
# Ubuntu/Debian sudo apt-get install redis-server php-redis sudo apt-get install memcached php-memcached sudo systemctl restart php7.4-fpm - 用途:作为应用层缓存(如查询结果、页面片段、会话存储等),减轻数据库负载,提升并发能力。
- 安装与启用:
四 MySQL缓存与数据库层优化
-
InnoDB 缓冲池(最核心的“缓存”)
- 建议将 innodb_buffer_pool_size 设为物理内存的50%~80%(视业务而定),并合理设置 innodb_buffer_pool_instances(多核可设为 CPU 核数的 1~2 倍),可显著提升读写性能。
- 监控与调优:通过 SHOW ENGINE INNODB STATUS 查看命中率,理想值通常**> 95%**;必要时结合慢查询日志与索引优化降低物理读。
-
查询缓存说明
- MySQL 8.0 已移除查询缓存(Query Cache);对 5.7 及以下版本,若使用查询缓存,需注意高并发写场景下的失效抖动,通常更推荐依赖 InnoDB 缓冲池与**应用层缓存(Redis/Memcached)**替代。
五 上线与运维要点
-
缓存命中观测与调优
- Nginx:在响应头加入 X-Proxy-Cache / X-FastCGI-Cache,常见值为 HIT/MISS/EXPIRED/UPDATING/STALE,据此调整 proxy_cache_valid / fastcgi_cache_valid 与 keys_zone 容量。
- MySQL:关注 InnoDB Buffer Pool 命中率,并通过慢查询与索引优化减少磁盘读。
-
缓存失效与更新策略
- 过期刷新:设置合理 inactive / proxy_cache_valid,必要时启用 proxy_cache_background_update 提前后台刷新。
- 主动刷新:对关键 URL 采用“删除缓存文件”或“按 URL 定向更新”的方式,避免全量失效带来的抖动(适合发布场景)。
-
安全与合规
- 对含敏感信息的页面使用 Cache-Control: no-cache / private 或 fastcgi_cache_bypass / proxy_no_cache 跳过缓存;对可缓存内容设置 Vary: Accept-Encoding 以正确处理压缩协商。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: LNMP服务器如何配置缓存策略
本文地址: https://pptw.com/jishu/768142.html
