У меня есть набор сценариев на пути / admin, выполнение которых может занять некоторое время и привести к тому, что Varnish достигнет лимита времени ожидания. Есть ли способ увеличить таймауты для определенного пути, а не для всего бэкэнда?
Вы можете попробовать добавить еще один бэкэнд с тем же хостом, но с разными таймаутами
И используйте его для своих URL-адресов с req.backend
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;
}
..
}
Совсем недавно столкнулся с чем-то вроде этого ..
Мы добавили следующее в бэкэнды (убедитесь, что НЕ ПОСТАВЛЯЕТЕ его во вложенном объявлении .probe {} [небольшая ошибка, которая на короткое время вызвала у нас некоторую путаницу;]):
.connect_timeout = 60s;
.first_byte_timeout = 120s;
.between_bytes_timeout = 60s;
Вы можете узнать о них больше с помощью «man vcl».
Надеюсь это поможет!
Используйте vcl_backend_fetch и установите там время ожидания:
sub vcl_backend_fetch {
if (bereq.method == "POST" && bereq.url == "/slow") {
set bereq.first_byte_timeout = 300s;
}
}
Вы можете использовать pipe для длинных запросов
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";
}