Shopware6与Varnish集成问题:清除缓存未触发Varnish缓存失效
Shopware6 与 Varnish 缓存集成:后台清除缓存未触发Varnish刷新的解决方案
核心说明:这不是Shopware6的功能缺失,默认后台【设置>缓存与索引>清除缓存】操作仅清理Shopware自身的应用层缓存(如文件缓存、Redis缓存等),不会主动联动Varnish清除缓存,需要额外配置实现联动。
配置步骤:
- 配置Varnish允许PURGE请求:在Varnish的VCL配置文件中,添加允许Shopware服务器IP发起PURGE请求的规则,示例片段:
配置完成后重启Varnish服务生效。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); } } - Shopware中添加缓存清除钩子:通过自定义事件订阅器,监听Shopware的缓存清除事件,触发时向Varnish发送PURGE请求。示例代码逻辑:
将该订阅器注册为Shopware服务后,后台清除缓存时会自动触发Varnish缓存清理。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服务地址/*'); } } - 验证效果:执行后台清除缓存操作后,用
varnishlog命令查看Varnish日志,确认是否收到PURGE请求,同时访问店铺页面验证缓存是否已更新。
- 配置Varnish允许PURGE请求:在Varnish的VCL配置文件中,添加允许Shopware服务器IP发起PURGE请求的规则,示例片段:
简易替代方案:若不想开发自定义代码,可使用Shopware官方的HTTP Cache Invalidator扩展,通过配置Webhook,在后台清除缓存时自动调用Varnish的缓存清除接口。
内容的提问来源于stack exchange,提问作者Zirc75
相关产品推荐
相关产品推荐

