加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 使用Varnish HTTP加速器清除目录下的所有文件

发布时间:2020-12-13 16:19:32 所属栏目:PHP教程 来源:网络整理
导读:是否可以使用Varnish清除特定目录下的所有文件?你怎么能在 PHP脚本中完成这个? 例如,如果URL包含路径/ product / a-specific-product /,是否也可以清除/ product / a-specific-product / a-sub-page /?等文件. 我有以下函数用于清除Varnish 3中的特定URL(
是否可以使用Varnish清除特定目录下的所有文件?你怎么能在 PHP脚本中完成这个?

例如,如果URL包含路径/ product / a-specific-product /,是否也可以清除/ product / a-specific-product / a-sub-page /?等文件.

我有以下函数用于清除Varnish 3中的特定URL(类VarnishPurger()的一部分:

public function executePurge()
{
    $purgeUrls = array_unique($this->purgeUrls);

    foreach($purgeUrls as $url)
    {
        $this->purgeUrl($url);
    }

    if (!empty($purgeUrls))
    {
        $this->purgeUrl(home_url());
    }        
}

protected function purgeUrl($url)
{
    $c = curl_init($url);
    curl_setopt($c,CURLOPT_CUSTOMREQUEST,'PURGE');
    curl_exec($c);
    curl_close($c);    
}

解决方法

您可以在Varnish中创建自定义PURGE处理程序,以使用例如ban_url()来处理regexp清除.

例如,在PHP中,当您要清除时,为Varnish添加自定义HTTP标头.

curl_setopt($c,CURLOPT_HTTPHEADER,array('X-Purge-Regex-URL'));

然后在vcl_recv()中添加

if (req.http.X-Purge-Regex-URL) {
  if (!client.ip ~ purge) {
    error 405 "Not allowed.";
  }
  ban_url(req.url);
  error 200 "Banned URL";
}

现在当您为/ product / a-specific-product /与regexp匹配的所有内容发出清除时,包括/ product / a-specific-product / a-sub-page /将被清除.

请注意,HTTP主机被忽略,因此如果您正在运行虚拟主机并且只想清除特定站点,则需要使用ban()而不是req.http.host和req.url参数.如果您需要这种类型的解决方案,请告诉我.

此外,如上所述,清除是正则表达式清除,因此清除/产品将清除所有匹配产品的URL.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读