是否可以在条件中使用VCL中的清漆计数器?
我想根据MAIN.backend_conn的当前值写一个条件,但我无法弄清楚,即使在内联C中我是否可以在VCL中使用统计信息。
现在我正在使用这样的配置:
backend default {
.host = "192.168.122.11";
.probe = {
.url = "/check-connections.php";
.interval = 1s;
.threshold = 4;
}
}
backend sessionWorker {
.host = "192.168.122.11";
.probe = {
.url = "/other-probe";
.interval = 5s;
.threshold = 2;
}
}
sub vcl_recv {
if (req.http.cookie ~ "(^|;\s*)(SESS=)" || std.healthy(req.backend_hint)) {
set req.backend_hint = sessionWorker;
} else {
return (synth(503, "Server overloaded"));
}
}
check-connections.php读取nginx状态 - 活动连接并触发错误,如果有更多活动连接:
if ($active > 10) {
http_response_code(502);
} else {
http_response_code(200);
}
我想找到一个解决方案,如何将当前连接(VBE.conn)的std.healty(req.backend_hint)替换为直接在VCL中的后端。
答案 0 :(得分:0)
已经实施了一些计数器。像bereq.retries
:
sub vcl_backend_response {
if (beresp.status == 503 && bereq.retries < 5 ) {
return(retry);
}
}
sub vcl_backend_error {
if (beresp.status == 503 && bereq.retries == 5) {
synthetic(std.fileread("/path/to/my/file/varnish503.html"));
return(deliver);
}
}
也许这已经是你需要的了。否则here是其他内置计数器的列表。