nginx отдаёт протухший кеш

12
H
На сайте с 15.02.2010
Offline
105
967

Цель - кешировать картинки на фронт-энде на час, но, если бек-энд не доступен - то сойдёт и протухший.

И всё почти получилось, но бек-энд доступен и файла запрашиваемого там нет, а отдаётся всё равно из кеша.

http {

proxy_cache_path /var/lib/nginx/cache levels=1:2 use_temp_path=off keys_zone=backcache:16m inactive=7d max_size=1G;
proxy_cache_valid any 1h;
proxy_cache_valid 404 1m;
proxy_cache_use_stale timeout;

Даже если закоментировать proxy_cache_use_stale (равно как и указать другие параметры) - всё равно отдаёт из кеша.

Это хорошо и полезно, если бек-энд упал. Но, если он работает - хотелось бы отдавать клиенту 404 хотя бы по истечении proxy_cache_valid

Где ошибка, что я делаю не так?

O
На сайте с 28.07.2009
Offline
131
#1

Может, в первой директиве все же не any, а 200?

занимаюсь автоматизацией торговли (http://olegon.ru)
lonelywoolf
На сайте с 23.12.2013
Offline
151
#2

Если я правильно понял - уберите для начала

hubbiton:
inactive=7d

А вообще, вам нужно контролируемое кэширование настраивать.

Платный и бесплатный хостинг с защитой от DDoS (http://aquinas.su)
M
На сайте с 17.09.2016
Offline
128
#3

1) proxy_cache_valid any 1h; # Отдавать с кеша в течении часа любой код ответа

Т.е. оно в кеш положило и в течении часа к бекенду не будет обращаться (соответственно nginx и не знает что файла уже нет на бекенде)

2) Как выше сказал lonelywoolf inactive стоит уменьшить, ибо у Вас будет папка засоряться мусором, который никогда не будет отаваться с кеша (из-за низкого proxy_cache_valid any 1h; )

H
На сайте с 15.02.2010
Offline
105
#4
olegon:
Может, в первой директиве все же не any, а 200?

Совсем нелогично.

lonelywoolf:
А вообще, вам нужно контролируемое кэширование настраивать.

Что тут контролировать? Это кеширующий реверс-прокси для раздачи статики (1 домен, 1 бекенд, все файлы равноприоритетны), тут всё просто по идее д.б.

Mobiaaa:
1) proxy_cache_valid any 1h; # Отдавать с кеша в течении часа любой код ответа
Т.е. оно в кеш положило и в течении часа к бекенду не будет обращаться (соответственно nginx и не знает что файла уже нет на бекенде)

Это понятно. Но совсем непонятно, почему через сутки так и отдаётся из кеша, хотя указано кешировать на час! На бекенд даже запросов никаких не отправляется.

Mobiaaa:
Как выше сказал lonelywoolf inactive стоит уменьшить, ибо у Вас будет папка засоряться мусором, который никогда не будет отаваться с кеша (из-за низкого proxy_cache_valid any 1h; )

Да пусть забивается, гиг места там можно позволить и эта машина больше ничем не занимается. Такой большой кеш нужен на случай, если бекэнд недоступен (он совсем не рядом и не в самом "правильном" месте)

Если уменьшать inactive - то появятся ошибки для клиентов при истечению этого времени, если недоступен бекенд. Это большее зло и цель этого прокси именно избавиться от этого.

---------- Добавлено 20.01.2020 в 11:45 ----------

Тут дело, как я понимаю, в диррективе proxy_cache_use_stale. Но что именно - не очень понятно, у Сысоева как-то очень туманно написано по этому поводу... Или я дурак и не понимаю ))

M
На сайте с 17.09.2016
Offline
128
#5

Не обратил внимание, что вопрос о статике, тогда я думаю всё гораздо проще.

Запрос не доходит и до nginx, так как ответ закешировался в браузере

Какой-нибудь expires max;

H
На сайте с 15.02.2010
Offline
105
#6

Не, браузерного кеширования нет, везде проверил, включая Тор-браузер. И в конфиге сервера всё просто и прозрачно, нет там никаких expires max

Сейчас провёл эксперимент:

1. Создал на бекенде файл, открыл в браузере - 200 ОК

2. Через час с небольшим остановил бекенд - 200 ОК

3. Удалил файл, запустил бекенд - 404.

Вроде всё, как задумано...

Но вчерашний удалённый файл - до сих пор 200 ОК, думаю - пропадёт позже, вчера и proxy_cache_valid больше стояло.

Я склоняюсь к мысли, что параметры кеша хранятся в самом кеше и действуют те настройки, который были в момент кеширования, а не текущие. Но это не точно, еще поковыряю, очень интересно!

Текущий конфиг:

proxy_cache_path /var/lib/nginx/cache levels=1:2 use_temp_path=off keys_zone=backcache:16m inactive=7d max_size=1G;

proxy_cache_valid any 1h;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error http_500 http_502 http_503 http_504;
IL
На сайте с 20.04.2007
Offline
435
#7
hubbiton:
Но вчерашний удалённый файл - до сих пор 200 ОК, думаю - пропадёт позже, вчера и proxy_cache_valid больше стояло.

А если "вчерашний удалённый файл" открыть в приватном окне браузера?..

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
H
На сайте с 15.02.2010
Offline
105
#8

ivan-lev, всё равно до сих пор отдаётся )) Я в курсе про такие вещи, потому всегда в Тор-браузере проверяю, со "сменой личности". Там точно никаких кешей: ни браузерных, ни даже провайдерских по пути.

Да и в логе фронтэнда запрос есть и ответ - 200. А на бекенде даже запросов нет (как и файла)

Andreyka
На сайте с 19.02.2005
Offline
822
#9

А почему его нет? Удалили?

Ну раз удалили - то удаляйте и из кеша.

Не стоит плодить сущности без необходимости
LEOnidUKG
На сайте с 25.11.2006
Offline
1745
#10
но бек-энд доступен и файла запрашиваемого там нет, а отдаётся всё равно из кеша.

В этом и есть суть кэша.

В любой CMS при изменении страницы, надо очищать кэш. А по вашей логики кэш должен ещё и долбить каждый раз основной файл.

Также, в чём ВООБЩЕ суть у вас кэширования статики? Эти файлы генерируются что-ли?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий