Можно ли предотвратить кэширование на основе размера ответа бэкэнда в Varnish?

Мы кэшируем проблемный сервер IIS, который иногда просто отправляет пустые ответы (0 байт) вместо правильных. Кэширование этих ответов было бы катастрофой, и мы не можем решить проблему, поскольку это не наш сервер. Вместо этого я бы хотел проинструктировать Varnish не кэшировать ответы от бэкэнда, если они пусты (0 байт).

Читая ссылку на VCL ( https://www.varnish-cache.org/docs/4.0/reference/vcl.html), я не вижу очевидного способа решения этой проблемы.

Это можно сделать?

2 ответа

Если вы хотите использовать его как целое число, чтобы увидеть значение больше или меньше, используйте std.

import std; 

if (std.integer(beresp.http.content-length, 0) < 500) {
  #logic here 
}

Размер ответа должен быть доступен в виде заголовка HTTP.

Пример (в vcl_backend_response):

if (beresp.http.Content-Length == "0") {
    return(retry);   # Retries the request
}

или же:

if (beresp.http.Content-Length == "0") {
    beresp.uncacheable = true;   # Prevents object from being cached
}
Другие вопросы по тегам