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

nginx - обслуживает устаревший ответ кеша при обновлении

В nginx я использую

proxy_cache_use_stale updating

директива (http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_use_stale), чтобы одновременный запрос к недействительному кэшированному контенту отправлял только 1 запрос восходящему потоку (не первый запрос отвечает устаревшим контентом, в то время как первый запрос обновляет контент).

это хорошо работает.

Теперь есть способ получить немедленный ответ на первый запрос устаревшим содержимым и в то же время запустить обновление?

прямо сейчас время отклика очень хорошее для первого запроса, который не делает недействительным, но первый должен подождать, пока серверная часть не ответит. Я бы предпочел обслуживать устаревший контент, пока кеш не будет обновлен.

То, что вы ищете, называется stale-while-revalidate (RFC 5861) и реализовано в nginx в виде директивы, называемой proxy_cache_background_update. Аналогичный функционал можно найти в лаке 4 и в Squid это называется Свернутая пересылка.

Эта функция была добавлена ​​в nginx 1.11 (апрель 2016 г.) как proxy_cache_background_update

Если вы хотите гарантировать, что только один запрос может попасть на прокси-сервер за раз (например, сервер хрупок из-за высокой нагрузки, вызванной запросом), вам понадобятся все три из них:

proxy_cache_use_stale updating;
proxy_cache_background_update on;
proxy_cache_lock on;

В блоге nginx есть отличное объяснение того, зачем нужны эти трое и для чего они нужны: https://www.nginx.com/blog/nginx-caching-guide/.