LINUX.ORG.RU

nginx fastcgi_cache и как обновлять страницу в кэше?

 


1

2

делаю энтерпрайз бложик на локалхосте, способный выдержать хайлоад. в связи с чем сделал полное кэширование всего и вся. целиком кэшируется вся страница, но на странице есть динамический блок с авторизацией пользователя и оно тоже кэшируется, только еще с ключом $cookie_phpsessid. в итоге все прекрасно работает - отдается статика, и страница, и блок генерятся лишь единожды, а далее берутся уже из кэша, и склеиваются при помощи SSI. пользователь может заголиниться/разлогиниться - сгенерируется новый session_id, и блок с авторизацией снова попадет в кэш...

столкнулся с проблемой, что пользователь оставляет на сайте комментарий, а обновить страницу в кэше, чтобы отобразить страницу с новым комментарием - я не знаю как.

нашел парочку, как я считаю, костыльных методов. сторонний purge модуль nginx, который удаляет запрашиваемую страницу из кэша, либо же отправлять X-Update заголовок на страницу и проверять его через fastcgi_cache_bypass.
так или иначе это получается, что из скрипта во время обработки POST придется дергать эту же страницу? чтобы немедля обновить ее в кэше. пффф

вот я подумал, чтобы во время обработки POST запроса на добавления комментария - создавать клиенту cookie, затем проверять ее через fastcgi_cache_bypass $cookie_update, - и если такая кука существует, то nginx не будет брать страницу из кэша, а обратится к бэкенду. и в бэкенде уже генерируем эту страницу с новым комментарием, а куку можно удалить.
по вкусу, можно cookie заменить на GET параметр ?nocache=true и проверять $arg_nocache. не суть важно...
почти все прозрачно, без лишних запросов. и обновляется страница сразу.

и существуют ли еще способы удалить необходимые страницы из кэша? но скорей всего, придется ставить purge модуль, т.к. это самый удобный способ. блин.

★★★★★

опачки. кажется вопрос можно считать решенным. в /var/cache/nginx лежат файлы кэша, а их имена генерируются же тупо по имени ключа fastcgi_cache_key.

т.е. получается, в бэкенде, во время обработки POST запроса, я могу сделать тупо unlink() необходимых файлов кэшей, сгенерировав их имя в md5() по ключу. и ненадо никаких purge модулей ставить...

всем спасибо %)

Spoofing ★★★★★ ()
Ответ на: комментарий от xtraeft

нет, не знаю что это. (погуглил, какое-то кэширование php кода). неее, для меня есть статика, а есть динамика. вот динамика не нужна в каком-бы то нибыло виде. хочу отдавать статичные файлы (пока их кэш), а в будущем, чтобы можно было сгенерировать статичный сайт (заменив fastcgi_cache на реально существующие файлы). так что пока, fastcgi_cache хватает для всего.

Spoofing ★★★★★ ()
Ответ на: комментарий от Spoofing

так в любом случае у тебя кеш генерится php кодом, который тоже можно и нужно кешировать

xtraeft ★★☆☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.