July 14, 2014 11:37PM
Nginx 1.7.3, отличная версия, в ней полностью решен вопрос с ETag.

Но есть мелочи которых очень не хватает, их всего две )

1. Нельзя получить от клиента валидаторы (“If-Modified-Since” и “If-None-Match”) если файла кеша нет, эта ситуация возникает когда бекенд отдавал заголовки Cache-Control: private, для контента который должен кешироватся только в браузере (не публичный кеш).
Проблема решается если в конфиге прописать
fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match if_not_empty;
fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since if_not_empty;
Но тогда будет проблема с публичным кешем, потому что бекенд может получить валидаторы от браузера, ответить статусом 304, Cache-Control: public... и Nginx положит этот ответ (статусом 304 nobody) в файл своего кеша и будет его отдавать всем.
Я уже писал, про эту проблему
http://forum.nginx.org/read.php?21,245951,245951#msg-245951
Хочется её как-то решить.

2. Нельзя переопределить через HTTP заголовки значения директивы fastcgi_cache_use_stale и установить для кеширования max-age=0
Для чего это нужно, в конфиге прописывается директива fastcgi_cache_use_stale error, это значения нужно для 80% uri.
Но есть динамические страницы, которые нужно кешировать, но обязательно проводить ревалидацию на каждый запрос.
Пример из жизни где мы это юзаем.
Есть страница отчетов с графиками различной статистики, которая может меняться раз в сутки или каждую секунду, заранее это не известно. Доступ к этим отчетам имеют только залогиненые пользователи из определенных групп. Кол-во этих юзеров довольно высоко и количество запросов к этим отчетам так же высоко, по этому есть смысл их кешировать, но отдавать только после проведения проверка на вхождения юзара в нужную групу и на актуальность валидаторов (ETag).
Есть способ как создать кеш с max-age=0, через X-Accel-Expires: $time-1.
Но нет способа как динамически, сказать Nginx не использовать cache_use_stale для этого uri, прописать в конфиге все варианты этих uri сложно они динамические и не шаблонные, добавлять какой-то спец признак по которому можно создать общий location в принципе можно, но хочется более красивого и системного решения. На мой взгляд таким решением может стать Cache-Control: must-revalidate, если бекенд отдает этот заголовок, он сохраняется в кеш, но при повторном использовании кеша, Nginx всегда выполняет ревалидацию (must-revalidate), если бекенд не работает отдать клиенту статус ошибки. Это конечно будет иметь определенный оверхед, но такой кеш намного эффективней, чем каждый раз повторно генерировать отчет и все графики.

Если вы считаете возможным это реализовать, думаю этим будут пользоваться многие клиенты.
Subject Author Posted

Cache revalidation using If-None-Match

S.A.N June 26, 2014 10:36AM

Re: Cache revalidation using If-None-Match

Anatoly Mikhailov June 26, 2014 04:28PM

Re: Cache revalidation using If-None-Match

S.A.N July 14, 2014 11:37PM

Re: Cache revalidation using If-None-Match

Maxim Dounin July 15, 2014 06:54PM

Re: Cache revalidation using If-None-Match

S.A.N July 15, 2014 08:09PM

Re: Cache revalidation using If-None-Match

S.A.N July 15, 2014 08:44PM

Re: Cache revalidation using If-None-Match

Gena Makhomed July 17, 2014 05:50AM

Re: Cache revalidation using If-None-Match

S.A.N July 17, 2014 09:46AM

Re: Cache revalidation using If-None-Match

Gena Makhomed July 17, 2014 02:46PM

Re: Cache revalidation using If-None-Match

S.A.N July 17, 2014 06:23PM

Re: Cache revalidation using If-None-Match

Gena Makhomed July 18, 2014 07:16AM

Re: Cache revalidation using If-None-Match

S.A.N July 18, 2014 01:01PM

Re: Cache revalidation using If-None-Match

Gena Makhomed July 17, 2014 07:36AM

Re: Cache revalidation using If-None-Match

S.A.N April 01, 2015 12:04PM

Re: Cache revalidation using If-None-Match

Валентин Бартенев April 02, 2015 03:14AM

Re: Cache revalidation using If-None-Match

Gena Makhomed July 17, 2014 05:10AM

Re: Cache revalidation using If-None-Match

S.A.N July 17, 2014 08:17AM

Re: Cache revalidation using If-None-Match

Gena Makhomed July 17, 2014 02:08PM

Re: Cache revalidation using If-None-Match

S.A.N July 17, 2014 04:48PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 246
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready