【问题标题】:Varnish 4, Purging - I thought I had it all figured outVarnish 4, Purging - 我以为我已经弄清楚了
【发布时间】:2015-04-17 18:43:59
【问题描述】:

好吧,我会保持简单,PURGE 请求(或者我是这么认为的?)几乎都是按字面意思处理的:

acl purge {

    "localhost";

    "127.0.0.1";

}

然后

if (req.method == "PURGE") {
            if (!client.ip ~ purge) {
            return(synth(405, "This IP is not allowed to send PURGE requests."));
            }
            return (purge);
    }

我相当肯定以上两个陈述都是“正确的”,我挂断的是,如果我发送了一个

curl -X PURGE http://domain.com/

curl -X PURGE http://domain.com/.*

Varnish 发回 200 Purged well...缓存被清除了?即使它只是主页而不是整个缓存(发誓它都是使用上面的 .* 方法),并且上面的 sn-ps 代码是正确的,是否有任何特殊原因 http://domain.com(如实际主页)是没有清除?

varnishncsa 显示:

MYIP - - [16/Feb/2015:23:23:10 -0600] "PURGE http://domain.com/ HTTP/1.1" 200 241 "-" "curl/7.29.0"

我知道我肯定错过了一些愚蠢的东西,但我想不通?

【问题讨论】:

  • 你想明白了吗?

标签: caching varnish varnish-vcl


【解决方案1】:

official documentation 基本上说明了您所做的工作,但请记住 PURGE != BAN,您可以在 BAN 中使用正则表达式,但不能在 PURGE 中使用。使用 PURGE 可以删除一个特定 url 的所有 Vary 定义的副本。

在我使用 4.0.2 进行的测试中,它按建议工作,我缓存了主页,我执行了 curl -X PURGE http://localhost:8080/ 并在 varnishlog 中看到(除其他外):

*   << Request  >> 65542     
-   Begin          req 65541 rxreq
-   Timestamp      Start: 1424188792.108573 0.000000 0.000000
-   Timestamp      Req: 1424188792.108573 0.000000 0.000000
-   ReqStart       ::1 60496
-   ReqMethod      PURGE
-   ReqURL         /

-   VCL_acl        MATCH purge "localhost"
-   VCL_return     purge
-   VCL_call       HASH
-   VCL_return     lookup
-   VCL_call       PURGE

然后重新加载我看到一个 MISS & backend 请求(因为它不在缓存中):

*   << BeReq    >> 65548     
-   Begin          bereq 65547 fetch
-   Timestamp      Start: 1424188815.112540 0.000000 0.000000
-   BereqMethod    GET
-   BereqURL       /
-   BereqProtocol  HTTP/1.1

-   VCL_call       BACKEND_RESPONSE
-   TTL            VCL 120 21600 0 1424188815
-   VCL_return     deliver

*   << Request  >> 65547     
-   Begin          req 65546 rxreq

-   ReqMethod      GET
-   ReqURL         /

-   VCL_return     hash
-   VCL_call       HASH
-   VCL_return     lookup
-   Debug          "XXXX MISS"
-   VCL_call       MISS
-   VCL_return     fetch
-   Link           bereq 65548 fetch

顺便说一句,将“::1”添加到清除 acl 中的 ips 列表中,以防万一您使用的是 ipv6。它会返回 405,但谁知道呢。

【讨论】:

  • 看,这就是我做的事情 curl -X PURGE domain.com (清漆在 80 上)它返回 200 Purged 作为响应,但我似乎找不到任何被清除的东西。即使它作为文字匹配实际 index.php 文件(主页)应该被清除,不是吗?
  • 无法编辑 cmets,但即使我做了 curl -X PURGE localhost 一切(curl 输出、varnishlog 等)似乎都显示 200 响应,但页面没有被清除.另外一个问题,当涉及到实际的清除查找/响应时,清漆是“愚蠢的”,所以如果我对localhost/non-existant-file 进行清除,它通常仍会显示 200 对吗?它不喜欢在返回清除回复之前先检查缓存是否存在,对吧?
  • 是的,这是正确的,如果您被允许清除,您将始终获得 200。您必须小心传递正确的主机名 (-H "Host: domain.com") 和相同的路径 ("/" != "/index.php"),以便它可以清除正确的对象。检查是稍后对该对象的 GET 请求会导致 MISS。
猜你喜欢
  • 2023-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
相关资源
最近更新 更多