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

跨服务器部署Magento 2与Varnish缓存后缓存失效问题排查

排查Varnish与Magento 2缓存异常及重定向问题

让我们一步步拆解并解决你遇到的两个核心问题:访问Varnish IP时重定向到Magento源站,以及缓存未实际生效。

一、先解决重定向问题(核心根源)

当你访问Varnish服务器IP(129.89.188.245)时被重定向到Magento源站IP,这几乎肯定是Magento的Base URL配置不匹配导致的:

  1. 修改Magento后台Base URL配置
    登录Magento后台,依次进入:Stores > Configuration > General > Web > Base URLs

    • 将Base URL设置为 http://129.89.188.245/(Varnish服务器的IP)
    • 如果启用了HTTPS,同步修改Base URLs (Secure)里的地址
    • 保存配置后,清理Magento缓存:bin/magento cache:flush
  2. 验证Host头传递
    你的VCL配置中没有修改Host头,这是正确的——当用户访问Varnish IP时,Host头会被传递给Magento。只要Magento的Base URL和这个Host值匹配,就不会触发重定向。

二、解决缓存未实际生效的问题

你提到Varnish日志显示页面已缓存,但实际未从缓存提供内容,结合重定向问题,解决完Base URL后,再做以下验证:

  1. 确认流量确实经过Varnish
    不要直接访问Magento源站IP(129.89.188.244)——这个请求完全绕开了Varnish,自然不会被缓存。所有用户请求必须指向Varnish服务器IP,才能被Varnish处理和缓存。

    建议给Magento服务器的80端口加防火墙限制,只允许Varnish服务器访问:

    iptables -A INPUT -p tcp --dport 80 -s 129.89.188.245 -j ACCEPT
    iptables -A INPUT -p tcp --dport 80 -j DROP
    
  2. 验证缓存命中状态
    访问Varnish IP后,查看响应头(用浏览器开发者工具的Network面板,或者curl -I http://129.89.188.245):

    • 如果看到X-Magento-Cache-Debug: HIT,说明缓存命中
    • 如果是MISS,说明第一次请求未命中,刷新页面后应该变成HIT

    也可以用Varnish日志实时监控:

    varnishlog -g request -q "ReqUrl ~ '/'"
    

    查看日志中的Hit标记,确认缓存是否被正确读取。

  3. 检查VCL缓存规则的细节
    你的VCL配置大部分是正确的,但有几个点需要确认:

    • 静态文件缓存:当前VCL中对/pub/media或/pub/static的请求默认是return (pass),所以静态文件不会被缓存。如果需要缓存静态资源,可以注释掉这行,取消下面3行的注释:
      #return (pass);
      #unset req.http.Https;
      #unset req.http.X-Forwarded-Proto;
      #unset req.http.Cookie;
      
    • 健康检查:VCL中配置了后端健康检查/pub/health_check.php,确保这个文件在Magento服务器上存在且返回200:
      curl http://129.89.188.244/pub/health_check.php
      
      如果健康检查失败,Varnish会认为后端不健康,可能直接使用grace缓存或pass请求。
  4. 确认Magento全页面缓存配置
    进入Magento后台:Stores > Configuration > Advanced > System > Full Page Cache

    • 确保Caching Application选择Varnish Cache
    • 点击Export Varnish Configuration,对比导出的VCL和你当前的配置,确保关键规则一致(比如Purge规则、ESI配置)
    • 保存配置后重启Varnish:systemctl restart varnish

三、额外验证点

  • 检查Varnish的内存分配:你的配置中-s malloc,256m是合理的,但如果站点流量大,可以适当增加。
  • 测试Purge功能:用Varnish服务器IP发送Purge请求,确认缓存能被正确清理:
    curl -X PURGE -H "X-Magento-Tags-Pattern: .*" http://129.89.188.245
    
    应该返回200 Purged。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:25:20