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

NGINX не обслуживает «быстрый» устаревший контент с помощью proxy_cache_background_update

Мы запускаем NGINX перед нашим внутренним сервером.

Мы пытаемся включить proxy_cache_background_update функция, позволяющая NGINX асинхронно обновлять кеш и обслуживать СТАРОЙ контент, пока он это делает.

Однако мы замечаем, что он по-прежнему медленно доставляет УСТАРЕВШИЙ контент, как будто он не обслуживается из кеша. Время, необходимое для истечения срока действия элемента, очень медленное и явно не обслуживается из кеша - вы можете сказать, что он отправляется на внутренний сервер, получает обновление и доставляет его клиенту.

Вот наша конфигурация от NGINX:

proxy_cache_revalidate on;
proxy_ignore_headers Expires;
proxy_cache_background_update   on;

Наш внутренний сервер отправляет следующие заголовки:

HTTP/1.1 200 OK
Date: Thu, 28 Feb 2019 21:07:09 GMT
Server: Apache
Cache-Control: max-age=1800, stale-while-revalidate=604800
Content-Type: text/html; charset=UTF-8

При попытке получить просроченную страницу мы замечаем следующий заголовок:

X-Cache: STALE

Однако при отправке этого ответа он выполняется очень медленно, как если бы он связался с внутренним сервером и сделал это в реальном времени.

Версия NGINX:

$ nginx -v
nginx version: nginx/1.15.9

Приветствуются любые предложения, советы и изменения конфигурации.

ОБНОВИТЬ

Похоже, что сервер nginx есть почитая обслуживает устаревший контент (как мы тестировали), но он также обновляет кеш из бэкэнда по тому же запросу / потоку, что приводит к медленному времени отклика для клиента. Т.е. кажется, полностью игнорирует proxy_cache_background_update on; директива и не обновляется в фоновом режиме по отдельному подзапросу (async).

Пожалуйста, перейдите к билету:

https://trac.nginx.org/nginx/ticket/1738#comment:6

Похоже, это вновь открытая ошибка.

Я думаю ты скучаешь proxy_cache_use_stale updating;

Из документации для этого параметра:

в updating Параметр позволяет использовать устаревший кэшированный ответ, если он в настоящее время обновляется.

И для proxy_cache_background_update они говорят следующее:

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

Что то что proxy_cache_use_stale updating; делается.