清漆生病了

清漆生病了

我在使用 Varnish 时遇到了麻烦,它只对几个视图有效,然后就变得很差劲了……奇怪的是,它对大约 20 或 30 个请求有效。如果我直接调用 apache,它工作正常。我在 Debian Squeeze 上运行 Varnish 版本:3.0.3-1,目前,在同一台服务器上的端口 80 上运行 Apache,端口 8080 上运行 Varnish。

我在用着https://github.com/mattiasgeniar/varnish-3.0-configuration-templates作为我的 VCL 的基础并修改了 VCL 以支持 Concrete5。

有人知道我该如何调试这个吗?

backend default {
    .host = "127.0.0.1";
    .port = "80";
    .connect_timeout = 1.5s; 
    .first_byte_timeout = 45s; 
    .between_bytes_timeout = 30s; 
    .probe = {
        .url = "/";
        .timeout  = 1s;
        .interval = 10s;
        .window    = 10;
        .threshold = 8;
    }
}

日志

    0 CLI          - Rd ping
    0 CLI          - Wr 200 19 PONG 1353791312 1.0
    0 CLI          - Rd ping
    0 CLI          - Wr 200 19 PONG 1353791315 1.0
    0 Backend_health - default Still sick 4--X-R- 0 8 10 0.000689 0.000000 HTTP/1.1 301 Moved Permanently

(301 是因为我检查了 www。)

答案1

您的后端正在响应301健康检查;200默认情况下,仅是预期的“健康”响应。更改您的探测器:

.probe = {
    .url = "/";
    .timeout  = 1s;
    .interval = 10s;
    .window    = 10;
    .threshold = 8;
    .expected_response = 301;
}

编辑 :

这就是为什么日志一开始返回正常,但过了一段时间后会逐一下降到最终出现故障状态的原因:.interval、.threshold 和 .window 的设置 - 健康检查得到了“不健康”的响应,但它们并没有认为工作人员生病了,直到他们得到了足够多的坏响应,将窗口中的成功次数降至阈值以下

答案2

发生这种情况的原因是,当您的服务器正在等待(您的域)时301,探测器正在发送请求,因此它与任何服务器都不匹配,因此捕获所有服务器都会将其重定向。Host: 127.0.0.1Host: example.com

为了避免这种情况,你可以在探针中.request使用.url

.probe = {
    .request =  "GET / HTTP/1.1"
                "Host: example.com"
                "Connection: close"
                "Accept: text/html" ;
    .timeout  = 1s;
    .interval = 10s;
    .window    = 10;
    .threshold = 8;
}

这是探针参考

相关内容