ubuntu缓存如何与缓存插件配合使用
导读:Ubuntu 缓存与缓存插件配合的整体思路 分层协同:用系统级 tmpfs加速插件生成的临时文件,用Nginx/Apache 页面缓存承接首屏命中,用PHP OPcache加速脚本执行,用Redis/Memcached做对象/页面片段缓存...
Ubuntu 缓存与缓存插件配合的整体思路
- 分层协同:用系统级 tmpfs加速插件生成的临时文件,用Nginx/Apache 页面缓存承接首屏命中,用PHP OPcache加速脚本执行,用Redis/Memcached做对象/页面片段缓存,用Varnish作为反向代理全页缓存,最外层再叠加CDN与浏览器缓存。
- 缓存失效:为“登录态、购物车、评论表单、后台管理”等动态场景设置不缓存或短 TTL;对可缓存内容设置较长 max-age并配合ETag/Last-Modified协商。
- 监控与回退:观察命中率、后端响应时间与错误率,必要时一键降级(关闭代理缓存或插件缓存)。
Nginx 与页面缓存插件配合
- 典型场景:WordPress 等 CMS 的页面缓存插件(如 W3 Total Cache、WP Super Cache)生成静态 HTML,Nginx 作为反向代理/静态服务器直接命中,减少 PHP 与数据库压力。
- 推荐做法:
- 为插件生成的静态目录(如 /var/www/example.com/wp-content/cache)设置强缓存与协商缓存:
location ~* ^/wp-content/cache/ {
expires 7d; add_header Cache-Control “public, must-revalidate”;
try_files $uri $uri/ /index.php?$args;
} - 若使用 Nginx 作为反向代理,可开启 proxy_cache 作为“插件缓存失效/击穿”的兜底:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:50m max_size=1g inactive=60m;
location / { proxy_pass http://127.0.0.1:8080; proxy_cache STATIC; proxy_cache_valid 200 302 10m; proxy_cache_use_stale error timeout updating; } - 对动态请求(登录、POST、查询字符串明显变化的页面)设置 proxy_no_cache $cookie_*,$request_method !~ ^(GET|HEAD)$; 避免误缓存。
- 插件侧建议:开启“仅对已登录用户不缓存”“移动端分离缓存”“对象缓存(Redis/Memcached)”。
- 为插件生成的静态目录(如 /var/www/example.com/wp-content/cache)设置强缓存与协商缓存:
Apache 与页面缓存插件配合
- 启用磁盘与过期控制:
- 启用模块:sudo a2enmod cache cache_disk expires headers
- 配置虚拟主机:
CacheRoot /var/cache/apache2/mod_cache_disk
CacheEnable disk /
CacheDirLevels 2
CacheDirLength 1
CacheDefaultExpire 3600
ExpiresActive On
ExpiresByType text/css “access plus 1 week”
ExpiresByType application/javascript “access plus 1 week”
ExpiresByType image/jpeg “access plus 1 month”
- 与插件协同:将插件生成的静态资源与可缓存页面交由 mod_cache_disk 处理;对含 PHPSESSID、wordpress_logged_in 等标识的请求返回 pass,避免缓存登录/管理页。
- 验证:curl -I 查看 Cache-Control/Expires 头是否生效。
PHP 与应用层缓存配合
- OPcache(必开):加速 PHP 字节码执行,建议生产配置:
[opcache]
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 - 对象/页面片段缓存:
- 安装 Redis:sudo apt install redis-server;PHP 扩展:sudo apt install php-redis(或 php-memcached)。
- 在插件中启用 Redis/Memcached 对象缓存(如 WordPress 的 Redis Object Cache 插件),将数据库查询结果、侧栏片段、Transients 等放入内存。
- 会话存储:将 session.save_handler=memcached/redis,减少本地文件锁与磁盘 I/O。
将插件缓存放入内存 tmpfs 提升速度
- 适用:磁盘 I/O 成为瓶颈、插件生成大量小文件(如 /wp-content/cache)。
- 做法:
- 创建目录并挂载到 tmpfs(重启后不持久,适合缓存):
sudo mkdir -p /dev/shm/example.com
sudo chmod 1777 /dev/shm/example.com
sudo mount --bind /dev/shm/example.com /var/www/example.com/wp-content/cache - 验证:df -h 应看到 tmpfs 占用增长;注意内存大小,避免 OOM。
- 如需持久化,可写入 /etc/fstab:/dev/shm/example.com /var/www/example.com/wp-content/cache none bind 0 0。
- 创建目录并挂载到 tmpfs(重启后不持久,适合缓存):
- 风险提示:tmpfs 数据在重启后消失,仅用于缓存,不影响站点可用性。
WordPress 实战配置示例
- 架构组合:Nginx 反向代理 + Varnish 全页缓存 + W3 Total Cache(页面缓存:磁盘;对象缓存:Redis;浏览器缓存:开启) + OPcache + Redis/Memcached。
- Nginx 示例(承接 Varnish 或应用):
location ~* ^/wp-content/cache/ { expires 7d; add_header Cache-Control “public, must-revalidate”; }
location ~ .php$ { include fastcgi_params; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; } - Varnish VCL 片段(对登录态与表单不缓存):
if (req.http.Cookie ~ “wordpress_logged_in|comment_author|wp-postpass|wordpress_test_cookie”) { return (pass); }
if (req.method != “GET” & & req.method != “HEAD”) { return (pass); } - 验证与观察:
- 响应头:curl -I 应见 Cache-Control/Expires(静态资源)与 X-Cache/Varnish(命中与否)。
- 监控:varnishstat/redis-cli info,插件“缓存命中率”面板,后端响应时间与 5xx 错误率。
- 维护:变更内容后主动清理插件与 Varnish 缓存;上线灰度验证,确保登录/支付/评论等流程不受影响。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu缓存如何与缓存插件配合使用
本文地址: https://pptw.com/jishu/781960.html
