Magento CE 1.8:Varnish 不会清除 URL

Posted

技术标签:

【中文标题】Magento CE 1.8:Varnish 不会清除 URL【英文标题】:Magento CE 1.8: Varnish won't Purge URLs 【发布时间】:2015-02-03 12:11:52 【问题描述】:

我们在 Debian Root 上运行 Magento CE 1.8,配置如下:

nginx --> Varnish 3.0 --> Apache    

我们已经安装了“PageSpeed powered by Varnish”-Extension(但这不是第 3 方模块的问题,我们在其他服务器上也遇到了同样的问题)

现在的问题: 如果我们更改某些产品、删除产品或其他内容,Varnish 不会清除这些 URL(我认为是这样)。 我在编辑产品时收到 504 网关超时。 如果我重新启动清漆服务,一切正常 - 但我们无法通过 magento 后端触发清除。

所以我检查了我的 /etc/default/varnish 文件以检查 deamon_opts:

DAEMON_OPTS="-a :8080 \
         -T localhost:6081 \
         -f /etc/varnish/default.vcl \
         -S /etc/varnish/secret \
         -s malloc,4G"    

这不是默认的 varnish 配置,因为 varnish 前面的 nginx 使用端口 80。所以 Varnish 又有 8080 和 Apache 80(仅限内部)。

Varnish Admin Port 是 6081,这也保存在 PageSpeed-Extension 中。 好的,我们来看看 default.vcl(一些部分):

backend default 
 .host = "127.0.0.1";
 .port = "80";

// 我觉得没问题,我们来看看 acl purge 是否允许 magento 清除 URL:

acl purge 
"localhost";
"127.0.0.1";

//一些VCL-stuff的行//现在可以在“sub vcl_recv”中找到清除:

# purge request
if (req.request == "PURGE") 
    if (!client.ip ~ purge) 
        error 405 "Not allowed.";
    
    ban("obj.http.X-Purge-Host ~ " + req.http.X-Purge-Host + " && obj.http.X-Purge-URL ~ " + req.http.X-Purge-Regex + " && obj.http.Content-Type ~ " + req.http.X-Purge-Content-Type);
    error 200 "Purged.";

好的,现在是问题的详细信息。自从我检查某种日志以来已经有一段时间了,上面写着“超时”(15 秒后),但我忘记了我使用的是哪个工具。如果我想在 Magento 后端编辑产品,就会出现问题。我单击保存,它会加载并加载和加载。然后我在浏览器中得到 504 Gateway Time-Out

varnishlog 说(在编辑产品时)

0 CLI          - Rd ping
0 CLI          - Wr 200 19 PONG 1417774882 1.0
0 CLI          - Rd ping
0 CLI          - Wr 200 19 PONG 1417774885 1.0
0 CLI          - Rd ping
0 CLI          - Wr 200 19 PONG 1417774963 1.0
0 CLI          - Rd ping
0 CLI          - Wr 200 19 PONG 1417774966 1.0
0 CLI          - Rd ping
0 CLI          - Wr 200 19 PONG 1417774969 1.0
14 BackendClose b default
18 BackendOpen  b default 127.0.0.1 34992 127.0.0.1 80

在我看来,magento 后端无法触发清除过程。在日志中(有超时的那个)是应该被清除的 URL。我认为magento和varnish(CLI?)之间存在某种连接失败

如何解决具体问题? 是否有任何工具、命令或技巧? 我不知道有什么问题。

提前谢谢你!

【问题讨论】:

Magento 1.8.1 及以上版本默认不兼容 Varnish 缓存。我建议改用 Redis。同时Nginx --> Varnish 3.0 --> Apache的配置似乎有点荒唐。它应该是 Varnish 3.0 --> Nginx --> php-FPM 没有 Apache。在您的特定情况下,请查看本指南以获取正确的 Varnish 3.0 配置文件。 ashsmith.io/2012/12/… 你好,Nginx-> varnish -> apache 运行良好,没有理由改变它。我们在另一台运行 Magento CE 1.7 的机器上遇到了同样的问题!所以我认为它不是 Magento 问题。 Varnish 正在运行,Store 超级快! Redis 不是 varnish 的替代品,它可能是 memcached 的替代品。我们需要让清漆运行。几天前,我在您的链接中测试了 vcl。大多数文件与我的 vcl 相似。这是相同的扩展名。 nginx 和 varnish 都可以作为后端服务的代理。您当前的实现使用 nginx 作为代理。您是否为 Nginx 指定了 proxy_pass? nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 【参考方案1】:

此命令将清除所有 Url

varnishadm "ban req.url ~/"

【讨论】:

以上是关于Magento CE 1.8:Varnish 不会清除 URL的主要内容,如果未能解决你的问题,请参考以下文章

Magento 使用 varnish 进行整页缓存

如何修复 Magento-1.9.4 中的“无法将 VCL 应用到 127.0.0.1:6082:无法从 Varnish 读取响应代码”错误

将 Magento 1.8 升级到 1.9.2.1

text 通过SSH安装带有示例数据的Magento 1.8

在 magento 1.8 中更改税收百分比

Magento 1.8 - 购物车寿命