我在使用 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.1
Host: 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;
}
这是探针参考