You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopware6与Varnish集成问题:清除缓存未触发Varnish缓存失效

Shopware6 与 Varnish 缓存集成:后台清除缓存未触发Varnish刷新的解决方案
  • 核心说明:这不是Shopware6的功能缺失,默认后台【设置>缓存与索引>清除缓存】操作仅清理Shopware自身的应用层缓存(如文件缓存、Redis缓存等),不会主动联动Varnish清除缓存,需要额外配置实现联动。

  • 配置步骤:

    1. 配置Varnish允许PURGE请求:在Varnish的VCL配置文件中,添加允许Shopware服务器IP发起PURGE请求的规则,示例片段:
      acl purge {
          "127.0.0.1"; // 替换为Shopware服务器的实际IP
          "你的服务器外网IP";
      }
      
      sub vcl_recv {
          if (req.method == "PURGE") {
              if (!client.ip ~ purge) {
                  return (synth(405, "Not allowed"));
              }
              return (purge);
          }
      }
      
      配置完成后重启Varnish服务生效。
    2. Shopware中添加缓存清除钩子:通过自定义事件订阅器,监听Shopware的缓存清除事件,触发时向Varnish发送PURGE请求。示例代码逻辑:
      class VarnishCacheClearSubscriber implements EventSubscriberInterface
      {
          public static function getSubscribedEvents(): array
          {
              return [
                  CacheClearerEvent::class => 'onCacheClear',
              ];
          }
      
          public function onCacheClear(CacheClearerEvent $event): void
          {
              $client = new \GuzzleHttp\Client();
              // 发送PURGE请求到Varnish服务地址,*表示清除所有缓存
              $client->request('PURGE', 'http://你的Varnish服务地址/*');
          }
      }
      
      将该订阅器注册为Shopware服务后,后台清除缓存时会自动触发Varnish缓存清理。
    3. 验证效果:执行后台清除缓存操作后,用varnishlog命令查看Varnish日志,确认是否收到PURGE请求,同时访问店铺页面验证缓存是否已更新。
  • 简易替代方案:若不想开发自定义代码,可使用Shopware官方的HTTP Cache Invalidator扩展,通过配置Webhook,在后台清除缓存时自动调用Varnish的缓存清除接口。

内容的提问来源于stack exchange,提问作者Zirc75

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:15:43