Назад | Перейти на главную страницу

Увеличить таймаут лака для определенного пути

У меня есть набор сценариев на пути / 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";
}