Очистить кеш 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 — ответ содержит действительный свежий контент непосредственно из кеша.