Очистить кеш NGINX, когда источник меняет код ответа

У меня есть конкретная потребность, когда я кэширую 404 ответа, а не 200 для запроса. Итак, когда отправляется запрос, скажем, например, example.com/page_A , и если страница еще не настроена в источнике, то этот 404 кэшируется в течение минуты следующим образом.

      proxy_cache_valid 404   1m;
proxy_cache_valid any   0;

Но когда эта страница фактически настроена в источнике и начинает отправлять 200, NGINX по-прежнему продолжает отправлять STALE 404, поскольку он уже кэшировал ответ 404 для этого запроса.

В настоящее время утилизация экземпляров NGINX решает эту проблему для нас. Но я пытаюсь найти решение для ОЧИСТКИ конкретного кеша запроса в таких случаях без повторного использования экземпляров NGINX.

я уже посмотрелдиректива. Но он доступен только с коммерческой подпиской.

К вашему сведению, определение кеша

      proxy_cache_path /nginx/cache keys_zone=main_cache:48m levels=1:2 inactive=24h max_size=10g use_temp_path=off;

1 ответ

Вы можете настроить nginx.conf и добавить:add_header X-Cache-Status $upstream_cache_status;

В этом примере добавляется HTTP-заголовок X-Cache-Status при ответе клиенту. Ниже приведены возможные значения $upstream_cache_status:

  • Miss — ответ не был найден в кеше, поэтому он был получен с исходного сервера. Затем ответ можно кэшировать.
  • BYPASS — ответ берется с исходного сервера, а не из кеша, поскольку запрос соответствует директиве proxy_cache_bypass. (См. «Могу ли я пробить дыры в моем кэше?» ниже). Затем ответ можно кэшировать.
  • EXPIRED — срок действия записи в кэше истек. Ответ содержит новый контент с исходного сервера.
  • STALE — содержимое устарело, так как исходный сервер не ответил правильно и настроен proxy_cache_use_stale.
  • ОБНОВЛЕНО. Содержимое устарело, так как запись в настоящее время обновляется в ответ на предыдущий запрос и настроено обновление proxy_cache_use_stale.
  • REVALIDATED — директива proxy_cache_revalidate включена, и NGINX проверяет, что текущий кэшированный контент все еще действителен (If-Modified-Since или If-None-Match).
  • HIT — ответ содержит действительный свежий контент непосредственно из кеша.
Другие вопросы по тегам