Varnish Cache - кэшировать ответ 403

Мы используем лак перед ведром AWS S3, и все работает очень хорошо, поскольку у нас был показатель совпадений 98,4%, что спасло нас от очень больших счетов за S3!

Теперь наши приложения должны иметь возможность запрашивать файлы, которые могут существовать, а могут и не существовать. Когда это произойдет, Varnish сделает запрос к S3 и получит ответ 403 (отказано в доступе). Мы перехватываем этот ответ в функции vcl_error, поскольку он позволяет нам отображать пользовательское сообщение об ошибке. Поскольку мы ожидаем 400-500 запросов в секунду, из которых около 40% приходится на файлы, которые еще не существуют, у нас возникнут проблемы с затратами на S3.

Мой вопрос: возможно ли, чтобы Varnish помнил, что файл вернул 403, и вернул кешированный ответ? Я бы хотел, чтобы Varnish подождал 5 минут, прежде чем запрашивать файл из бэкэнда. Мы запускаем Varnish 3.

Я прочитал документацию, которая, кажется, предполагает, что я могу использовать «set obj.ttl = 5m;» в функции vcl_error, но это не работает.

Спасибо! Алан


person Alan Clelland    schedule 15.05.2015    source источник


Ответы (1)


Да, можно кешировать. Просто проверьте код состояния ответа от S3 и установите ttl.

Лак 3:

sub vcl_fetch {
    if (beresp.status == 403 || beresp.status == 404 || beresp.status >= 500)
    {
        set beresp.ttl = 3s;
    }
}

Лак 4:

sub vcl_backend_response {
    if (beresp.status == 403 || beresp.status == 404 || beresp.status >= 500)
    {
        set beresp.ttl = 3s;
    }
}
person nonamenix    schedule 22.05.2015