最近把Blog的前端放到了阿里云香港B,为了更好的缓存和试验新的架构选用了很出名的Varnish来替换掉Nginx作为前端缓存服务器使用. 因为使用的是自定义的一个VCL文件,导致PURGE规则和Blog正在使用的缓存插件WP-Rocket不兼容,使用WP-Rocket插件内部自带的Varnish模块不能清理文章,清理缓存只对首页有效.
在查看了Varnish的日志之后发现,WP-Rocket发送的全局清理的参数类似于 http://example.com/*. 或者 http://example.com/page/.* 但是我的Varnish并没有配置支持Ban方法和支持正则表达式.为了能够清理文章页面,目前我在主题的function.php中加入了以下钩子作为一个临时的解决方案.
//这是一个临时解决方案. function purge_varnish($post_ID) { $url = get_permalink($post_ID); wp_remote_request( $url, array( 'method' => 'PURGE', 'blocking' => false, 'redirection' => 0 ) ); } add_action('save_post', 'purge_varnish');
当发布或者更新文章的时候就会自动触发钩子来执行清理动作. 就像备注里所说的一样,这只是一个临时的解决方案,只能清理对应的文章页面.其他相关联的东西都没有修改.等我有空的时候研究一下相关联的内容,再来扩充这个,