在 CentOS 上提升页面渲染速度的核心缓存策略
一 浏览器与协议层缓存
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule deflate_module modules/mod_deflate.so
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/html "access plus 1 hour"
</IfModule>
<IfModule mod_headers.c>
Header set Cache-Control "public, max-age=31536000, immutable" env=!no-cache
</IfModule>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
</IfIfModule>
说明:对带指纹/版本号的静态资源设置长 max‑age 与 immutable,对 HTML 设置较短时间以便内容更新及时生效。二 反向代理与页面级缓存
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 {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
}
}
vcl 4.0;
backend default { .host = "127.0.0.1"; .port = "8080"; }
sub vcl_recv {
if (req.http.Cookie ~ "PHPSESSID" || req.http.Authorization) { return (pass); }
return (hash);
}
sub vcl_backend_response {
if (bereq.http.Cookie ~ "PHPSESSID") { set beresp.uncacheable = true; return (deliver); }
set beresp.ttl = 120s;
}
sub vcl_deliver {
set resp.http.X-Cache = obj.hits > 0 ? "HIT" : "MISS";
}
提示:对登录态、个性化、带 Cookie 的请求走 pass,其余按 URL/参数哈希缓存。三 应用层数据缓存
sudo yum install memcached
sudo systemctl enable --now memcached
# 编辑 /etc/sysconfig/memcached 可按需调整 PORT/USER/MAXCONN/CACHESIZE
PHP 示例:$m = new Memcached();
$m->addServer('127.0.0.1', 11211);
$key = 'page_home_1';
$data = $m->get($key);
if (!$data) {
$data = buildPageData(); // 耗时操作
$m->set($key, $data, 300); // 缓存 5 分钟
}
render($data);
sudo yum install redis
sudo systemctl enable --now redis
建议:读多写少的热点数据优先入缓存,设置合理 TTL,并在缓存失效时采用“后台刷新/互斥锁”避免雪崩。四 静态资源与内容分发
五 操作系统与临时文件缓存
mkdir -p /dev/shm/myapp_cache
chmod 1777 /dev/shm/myapp_cache
mount --bind /dev/shm/myapp_cache /var/www/myapp/wp-content/cache
注意:内存有限,务必设置合适的缓存失效与清理策略,避免 OOM;系统重启后 tmpfs 内容会丢失。