Nginx 配置利用了 FastCGI 缓存 来提高 WordPress 的页面加载速度

Nginx 配置利用了 FastCGI 缓存 来提高 WordPress 的页面加载速度。以下是对该配置的详细解释及优化建议:

Nginx 配置利用了 FastCGI 缓存 来提高 WordPress 的页面加载速度

配置解释

  1. 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。
  2. fastcgi_temp_pathfastcgi_temp_path /tmp/wpcache/temp;
    • 指定缓存文件临时存储的路径。
  3. fastcgi_cache_key"$scheme$request_method$host$request_uri";
    • 定义缓存键。这个键确保缓存是基于协议($scheme)、请求方法($request_method)、主机($host)和请求 URI($request_uri)的组合唯一确定。
  4. fastcgi_cache_use_staleerror timeout invalid_header http_500;
    • 在出现特定错误(如 500 错误或超时)时,使用旧缓存以保证页面可用性。
  5. fastcgi_ignore_headersCache-Control Expires Set-Cookie;
    • 忽略来自后端的缓存控制头部,强制缓存所有内容,包括设置了 no-cache 的响应。

优化建议

  1. 调整缓存路径
    • 默认情况下,/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;
  2. 调整缓存大小
    • 250MB 的 keys_zone 通常可支持数百万个缓存条目,但可以根据内存大小调整。max_size 也可以根据实际站点内容调整为更大或更小。
  3. 优化缓存策略
    • 如果你的站点有动态部分(如登录后内容不同),可以设置条件跳过缓存: 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;
  4. 优化缓存清理
    • 使用工具(如 nginx-cache-purge 插件或手动脚本)定期清理不需要的缓存,避免缓存目录占用过多磁盘空间。
  5. 支持 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;

完整示例配置

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;
    }
}

注意事项

  1. 缓存插件兼容
    • 如果使用 WordPress 缓存插件(如 W3 Total Cache、WP Super Cache),需要关闭插件的页面缓存功能,以避免冲突。
  2. 缓存清理
    • 当站点更新或内容变化时,可以通过插件或脚本清理指定缓存,确保访客看到最新内容。
  3. 监控性能
    • 使用工具(如 htopiotop)监控缓存目录的磁盘 IO 和内存占用,防止性能瓶颈。

以上配置和优化建议可以帮助你最大化利用 Nginx 的 FastCGI 缓存功能,显著提高 WordPress 的响应速度和性能。

原创文章,作者:北单,如若转载,请注明出处:https://www.beidanyezhu.com/a/324.html

(0)
北单的头像北单
上一篇 2024-12-05 10:41:04
下一篇 2024-12-08 15:48:57

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

分享本页
返回顶部