Мы запускаем 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;
делается.