Nginx 配置利用了 FastCGI 缓存 来提高 WordPress 的页面加载速度。以下是对该配置的详细解释及优化建议:
配置解释
fastcgi_cache_path
:/tmp/wpcache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=1G;
/tmp/wpcache
:缓存文件的存储路径。levels=1:2
:缓存文件存储的目录层级,1:2 表示两层结构(最多 256×256 个子目录),适用于大量缓存文件。keys_zone=WORDPRESS:250m
:定义一个名为WORDPRESS
的共享内存区域用于存储缓存元数据,250m
指分配 250 MB 的内存。inactive=1d
:未被访问的缓存内容在 1 天后过期。max_size=1G
:限制缓存总大小为 1GB。
fastcgi_temp_path
:fastcgi_temp_path /tmp/wpcache/temp;
- 指定缓存文件临时存储的路径。
fastcgi_cache_key
:"$scheme$request_method$host$request_uri";
- 定义缓存键。这个键确保缓存是基于协议(
$scheme
)、请求方法($request_method
)、主机($host
)和请求 URI($request_uri
)的组合唯一确定。
- 定义缓存键。这个键确保缓存是基于协议(
fastcgi_cache_use_stale
:error timeout invalid_header http_500;
- 在出现特定错误(如 500 错误或超时)时,使用旧缓存以保证页面可用性。
fastcgi_ignore_headers
:Cache-Control Expires Set-Cookie;
- 忽略来自后端的缓存控制头部,强制缓存所有内容,包括设置了
no-cache
的响应。
- 忽略来自后端的缓存控制头部,强制缓存所有内容,包括设置了
优化建议
- 调整缓存路径:
- 默认情况下,
/tmp
通常位于内存盘或较小的分区。如果缓存内容较大,建议将路径改为持久存储位置,例如/var/cache/nginx/wpcache
。
fastcgi_cache_path /var/cache/nginx/wpcache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=2G; fastcgi_temp_path /var/cache/nginx/wpcache/temp;
- 默认情况下,
- 调整缓存大小:
- 250MB 的
keys_zone
通常可支持数百万个缓存条目,但可以根据内存大小调整。max_size
也可以根据实际站点内容调整为更大或更小。
- 250MB 的
- 优化缓存策略:
- 如果你的站点有动态部分(如登录后内容不同),可以设置条件跳过缓存:
set $skip_cache 0; # 不缓存 POST 请求或有特定 cookie 的请求 if ($request_method = POST) { set $skip_cache 1; } if ($http_cookie ~* "wordpress_logged_in_|wp-postpass_|comment_author_") { set $skip_cache 1; } # 配合缓存条件 fastcgi_cache_bypass $skip_cache; fastcgi_no_cache $skip_cache;
- 如果你的站点有动态部分(如登录后内容不同),可以设置条件跳过缓存:
- 优化缓存清理:
- 使用工具(如
nginx-cache-purge
插件或手动脚本)定期清理不需要的缓存,避免缓存目录占用过多磁盘空间。
- 使用工具(如
- 支持 gzip 或 brotli:
- 启用 gzip 或 brotli 压缩,减少网络传输的内容大小:
gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_proxied any; gzip_min_length 1024;
- 启用 gzip 或 brotli 压缩,减少网络传输的内容大小:
完整示例配置
fastcgi_cache_path /var/cache/nginx/wpcache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=2G;
fastcgi_temp_path /var/cache/nginx/wpcache/temp;
server {
listen 80;
server_name example.com;
root /var/www/html;
location / {
set $skip_cache 0;
# 不缓存 POST 请求或已登录用户
if ($request_method = POST) {
set $skip_cache 1;
}
if ($http_cookie ~* "wordpress_logged_in_|wp-postpass_|comment_author_") {
set $skip_cache 1;
}
fastcgi_cache WORDPRESS;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
注意事项
- 缓存插件兼容:
- 如果使用 WordPress 缓存插件(如 W3 Total Cache、WP Super Cache),需要关闭插件的页面缓存功能,以避免冲突。
- 缓存清理:
- 当站点更新或内容变化时,可以通过插件或脚本清理指定缓存,确保访客看到最新内容。
- 监控性能:
- 使用工具(如
htop
或iotop
)监控缓存目录的磁盘 IO 和内存占用,防止性能瓶颈。
- 使用工具(如
以上配置和优化建议可以帮助你最大化利用 Nginx 的 FastCGI 缓存功能,显著提高 WordPress 的响应速度和性能。
原创文章,作者:北单,如若转载,请注明出处:https://www.beidanyezhu.com/a/324.html