我们在 AWS 上运行我们的 Magento 商店,并且我们在 ELB 后面设置了自动缩放设置。在任何时候,我们至少有 2 个 Web 服务器在运行。每个 Web 服务器实例在其前面都有自己的 Varnish Cache 服务器来处理传入的请求。
现在,问题是一旦我们更改了一些静态内容,如 CSS、图像等,我们必须通过 SSH 连接到每个前端 EC2 实例并禁止 Varnish 缓存的对象。这真的很麻烦,因为我们首先必须从 AWS 控制台手动获取实例的 IP,然后通过 SSH 进入它们,如果我们随时拥有超过 2-3 台服务器,这会花费大量时间并且效率不高。
我研究了由 Phoenix Media 安装 PageCache 扩展,但他们模块的问题是我们仍然必须在我们事先不知道的配置中手动输入 varnish 实例的静态 IP 列表。这在我们的案例中不起作用,因为自动缩放服务器来来去去。
有没有一种方法可以一次为所有正在运行的前端服务器设置缓存失效?我在默认 VCL 文件中添加了所需的代码,它允许从同一子网中的任何实例中清除/禁止。对于所有管理任务,我们都有一个专用的 EC2,我计划使用它来向所有前端服务器发出缓存失效请求。
我在想,也许我可以编写一个 shell 脚本并使用 AWS API 获取所有前端实例的 IP 列表,然后向所有这些实例发出禁令命令。这行得通吗?如何设置它?
此外,是否可以采取措施自动使在从存储库中提取最新代码期间更改的所有文件的缓存失效?
解决此问题的最有效方法是什么?