我在 /admin 路径上有一组脚本,它们执行起来需要一段时间,导致 Varnish 达到超时限制。有没有办法增加特定路径的超时时间,而不是整个后端的超时时间?
答案1
您可以尝试添加一个具有相同主机但不同超时的后端
并将其与 req.backend 一起用于你的 url
backend default {
.host = "127.0.0.1";
.port = "81";
}
backend admin {
.host = "127.0.0.1";
.port = "81";
.connect_timeout = 600s;
.first_byte_timeout = 600s;
.between_bytes_timeout = 600s;
}
sub vcl_recv {
...
if (req.url ~ "^/admin")
{
set req.backend = admin;
}
..
}
答案2
最近刚遇到类似的事情..
我们在后端添加了以下内容(确保不要将其放在 .probe { } 子声明中 [只是一个小错误,在短时间内给我们带来了一点困惑 ;]):
.connect_timeout = 60s;
.first_byte_timeout = 120s;
.between_bytes_timeout = 60s;
您可以使用“man vcl”了解有关它们的更多信息。
希望这可以帮助!
答案3
使用 vcl_backend_fetch 并在那里设置超时:
sub vcl_backend_fetch { if (bereq.method == "POST" && bereq.url == "/slow") { set bereq.first_byte_timeout = 300s; } }
答案4
您可以使用管道进行长请求
if (req.url ~ "^/admin/long_request" || req.url ~ "^/upload")
{
return (pipe);
}
# just add the Connection: close header
sub vcl_pipe {
set bereq.http.connection = "close";
}