ubuntu缓存如何与缓存插件配合使用
小樊
38
2025-12-25 23:19:48
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)”。
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 数据在重启后消失,仅用于缓存,不影响站点可用性。
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 缓存;上线灰度验证,确保登录/支付/评论等流程不受影响。