在 使用 Caddy 处理 WordPress 当中,我提到在用 Caddy 处理 WordPress,且为了性能做了很多优化。
我的博客经历了三重优化:最基础的 PHP OpCache + Redis 数据查询缓存 + 静态化缓存。
其中一个比较有效的,便是在整个站点上加入静态化缓存,绝大多数游客看到的其实是预先生成好的静态页面,从而减少了数据库加载、渲染、计算的成本。
而想要实现静态化,则需要借助于 Cache Enabler 插件和 Caddy 配置来完成。
安装插件并启用
安装 Cache Enabler 插件,并启用插件,启用后,在后台设置中,配置过期时间和对应的清除策略,并保存。这个时候,Cache Enabler 就会自动帮你去生成不同的页面了。
配置 Caddy 路由转发
首先,你应该在你的 php_fastcgi unix//run/php/php-fpm.sock
前面加入缓存的代码并重启 Caddy,具体如下
缓存配置如下
@cache {
not header_regexp Cookie "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in"
not path_regexp "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(index)?.xml|[a-z0-9-]+-sitemap([0-9]+)?.xml)"
not method POST
not expression {query} != ''
}
route @cache {
try_files /wp-content/cache/cache-enabler/{host}{uri}/https-index.html /wp-content/cache/cache-enabler/{host}{uri}/index.html {path} {path}/index.php?{query}
}
Code language: JavaScript (javascript)
这部分配置先定义了一个 @cache
块,用于后续判断,并在其中加入了多种条件判断,说明了不使用缓存的情况:
- 如果用户有以下 Cookie,就不使用缓存:
- comment_author(评论作者)
- wordpress_[a-f0-9]+ (WordPress 的会话 Cookie)
- wp-postpass(密码保护文章的 Cookie)
- wordpress_logged_in(登录状态的 Cookie)
- 如果当前请求命中了以下路径则不缓存
- /wp-admin/(后台管理页面)
- /xmlrpc.php(XML-RPC 接口)
- 所有 wp-*.php 文件(WordPress 系统文件)
- /feed/(RSS 订阅)
- sitemap 相关文件
- POST 请求不缓存(比如评论)
- 带查询参数的缓存不请求。
随后,通过 route @cache
定义了命中缓存部分的查找顺序:
- 先找 HTTPS 版本的缓存:/wp-content/cache/cache-enabler/{host}{uri}/https-index.html
- 再找普通缓存:/wp-content/cache/cache-enabler/{host}{uri}/index.html
- 如果找不到缓存,就尝试原始路径:{path}
- 最后尝试 PHP 文件:{path}/index.php?{query}
查看效果
打开一个无痕窗口,访问你的网站,如果在 html 底部看到 <!-- Cache Enabler by KeyCDN @ Sat, 04 Jan 2025 03:05:34 GMT (https-index.html) -->
,则说明你已经成功启用静态化缓存了!
参考资料
- 如果你使用 WP Supercache 、 WP Rocket、WP Fastest cache、W3 Total Cache,则可以参考 https://caddy.community/t/example-configure-wordpress-with-a-static-cache/8215 进行相关配置。
老哥这个caddy服务器和nginx服务器运行wp有啥不同吗,我用过redis、mem,apcu,感觉nginx跑都挺快的
没啥特别的区别,就是配置起来方便一点,易于理解一些。其实你在 Nginx 上也能找到 Cache Enabler 的配置规则。
和nginx差不多呢
是的,主要是配置规则相比于 nginx 简单一些。