Как-то слишком просто.. geo $force_bypass { 127.0.0.1 1; default 0; }
Добавил в fastcgi_cache_bypass $force_bypass на запрос с localhost отдаётся новый контент, всё круто, в логах $upstream_cache_status=BYPASS, но кэш не обновляется и на запрос снаружи отдаётся старая версия с $upstream_cache_status=HIT. На диске в кэше лежит старый файл. Чего не хватает котёнку? > On 1 Aug 2018, at 18:28, Igor A. Ippolitov <iippoli...@nginx.com> wrote: > > Юрий, > > Если нужно заместить элемент, то даже отдельный location не потребуется: > geo $bypass { > 192.168.0.0/24 1; > default 0; > } > > И потом: > > location / { > proxy_cache zone1; > proxy_pass $upstream; > proxy_cache_bypass $bypass; > } > > В таком варианте, при обращении из 192.168.0.0/24 обращение в upstream будет > мимо кэша. Но при этом, контент будет обновлён, если ответ в принципе может > быть кэширован. > > Добавить в условие заголовки так же несложно. А вот аутентификация потребует > дополнительных усилий. > > Так же можно сделать отдельный server{}, в котором использовать ту же зону, с > теми же location'ами и задать там любые правила доступа. > > On 01.08.2018 16:48, Yury Lyakh wrote: >> Звучит как-то необычно, есть пример рабочего конфига? хотя бы этого самого >> специального локейшна?… >> что-то не придумывается конфиг который позволит внутри nginx принудительно >> обновить элемент в кеше >> >>> On 31 Jul 2018, at 13:54, Igor A. Ippolitov <iippoli...@nginx.com >>> <mailto:iippoli...@nginx.com>> wrote: >>> >>> On 31.07.2018 00:24, j...@jdwuzhere.ru <mailto:j...@jdwuzhere.ru> wrote: >>>> >>>>> On 30 Jul 2018, at 19:59, Igor A. Ippolitov <iippoli...@nginx.com >>>>> <mailto:iippoli...@nginx.com>> wrote: >>>>> >>>>>> On 30.07.2018 14:29, Gena Makhomed wrote: >>>>>>> On 30.07.2018 14:06, Igor A. Ippolitov wrote: >>>>>>> >>>>>>> Мне кажется, что proxy_cache_bypass легко позволяет замещать контент в >>>>>>> кэше (что и делает purge, в широком смысле). >>>>>> Замещать существующий контент или добавлять новый - да. >>>>>> Но удалять не позволяет, в этом и состоит (небольшое) отличие. >>>>> Но ведь какой-то ответ на запрос "пурженного" контента всё равно придёт >>>>> клиенту? Почему бы не закэшить сразу его. >>>>> Или условную болванку с max-age:0, которая будет обновлена по первому же >>>>> запросу от клиента >>>> Погодите, я что-то потерялся. Есть профиль игрока, который не меняется >>>> неделями. Nginx всю неделю (TTL кэша) радостно отдаёт страницу профиля из >>>> этого кэша. Но однажды, игрок начинает играть в новое и профиль необходимо >>>> обновить. Как без purge сообщить nginx, что информация обновилась и надо >>>> сходить в backend за новой страницей, чтобы положить её в кэш до >>>> следующего прихода? >>> Как бы вы делали PURGE для профиля игрока? URL профиля вы знаете. >>> >>> Для PURGE вы бы "дёрнули" запрос, который удалит ненужный элемент и в >>> следующий раз nginx перезапросит контент с апстрима. >>> Этот запрос, обычно, приходит в отдельный location с нужными настройками: >>> ключ кэша, права доступа, всякое такое. >>> >>> В моём подходе вы "дёргаете" такой же запрос в специальный location, >>> который ходит в апстрим мимо кэша (proxy_cache_bypass). >>> В разных вариациях, апстримом будет: >>> либо сам nginx, который отдаёт HTTP 200 и Cache-Control: max-age=0; >>> либо реальный апстрим, который отдаст актуальную копию данных >>> >>> В первом случае контент сразу "протухает" и его актуализируют на первом же >>> запросе. >>> Во-втором - сразу актуальный. >>> >>> В следущий раз, когда запросят профиль пользователя, nginx либо пойдёт в >>> апстрим, либо отдаст актуальную кэшированную версию. >>> >>>> >>>>> На первый взгляд, PURGE не кажется необходимым средством. Хотя, вероятно. >>>>> может упростить жизнь в каких-то конфигурациях. >>>>>> Вот поэтому и не понятно, почему нельзя сделать директиву >>>>>> proxy_cache_purge доступной в open source версии nginx? >>>>>> >>>>>> Могу ошибаться, но коммерческую версию nginx покупают скорее всего >>>>>> не из-за директивы proxy_cache_purge, а ради других возможностей. >>>>>> >>>>>>>>> Если не прояснится - попробовать воспроизвести как минимум без >>>>>>>>> "--add-module=../ngx_cache_purge-2.3" (не понимаю, как люди >>>>>>>>> отваживаются использовать эту поделку, она при любых внутренних >>>>>>>>> изменениях в nginx'е разносит всё же) >>>>>>>> Если не использовать этот кривой сторонний модуль ngx_cache_purge, >>>>>>>> то какие у пользователей open source версии nginx есть альтернативы? >>>>>>>> Директиву proxy_cache_purge >>>>>>>> можете сделать доступной в open source версии nginx? >>>>>> P.S. >>>>>> >>>>>> Please do not top-post. >>>>>> >>>>>> Answer: Because it turns the discussion up-side-down. >>>>>> >>>>>> Question: Why should I not top-post? >>>>>> >>>>> _______________________________________________ >>>>> nginx-ru mailing list >>>>> nginx-ru@nginx.org <mailto:nginx-ru@nginx.org> >>>>> http://mailman.nginx.org/mailman/listinfo/nginx-ru >>>>> <http://mailman.nginx.org/mailman/listinfo/nginx-ru> >>>> _______________________________________________ >>>> nginx-ru mailing list >>>> nginx-ru@nginx.org <mailto:nginx-ru@nginx.org> >>>> http://mailman.nginx.org/mailman/listinfo/nginx-ru >>>> <http://mailman.nginx.org/mailman/listinfo/nginx-ru> >>> >>> >>> _______________________________________________ >>> nginx-ru mailing list >>> nginx-ru@nginx.org <mailto:nginx-ru@nginx.org> >>> http://mailman.nginx.org/mailman/listinfo/nginx-ru >>> <http://mailman.nginx.org/mailman/listinfo/nginx-ru> >> >> >> _______________________________________________ >> nginx-ru mailing list >> nginx-ru@nginx.org <mailto:nginx-ru@nginx.org> >> http://mailman.nginx.org/mailman/listinfo/nginx-ru >> <http://mailman.nginx.org/mailman/listinfo/nginx-ru> > _______________________________________________ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru
_______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru