Обновление кэша nginx 0.7.X засчет заголовков запроса
Igor Sysoev
is at rambler-co.ru
Mon Jun 22 17:11:40 MSD 2009
On Mon, Jun 22, 2009 at 02:03:01PM +0600, Mike Kazantsev wrote:
>
> Добрый день,
>
> Подскажите, как заставить nginx седьмой ветки не использовать свой кэш,
> если пользователь нажимает Ctrl+F5 в браузере?
>
> Ситуация такова:
> Стоит nginx (стоял 0.6.X) в качестве фронтенда (reverse-proxy) на
> порте 80, за ним apache на 90 порте. Обновили nginx до 0.7.60 для того,
> чтобы кэшировать им статику. Настройки:
>
>
> proxy_cache_path /path/cache-nginx
> levels=1:2 keys_zone=cache_main:10m inactive=1d
> max_size=5g;
> proxy_temp_path /path/cache-nginx/tmp;
> proxy_cache_min_uses 1;
> proxy_cache_valid 6h;
>
>
> server {
>
> location ~* \.(css|gif|jpeg|jpg|<...>)$ {
> proxy_cache cache_main;
> proxy_pass http://${ipaddr}:90;
> }
>
> ...
>
> }
>
>
> Кэш пишется.
> Тесты показали что если из апача передаются "Cache-Control: no-cache"
> или устаревший Expires, то nginx ничего не кэширует, что также нужно.
>
> Но есть и статика, которую нужно обновлять по требованию пользователя -
> когда он жмет Ctrl+F5 в браузере (или просто F5 в opera). Firefox
> передает "Cache-Control: no-cache" и "Pragma: no-cache", но nginx не
> подключается к апачу, просто отдавая файл из кэша.
>
> Хочется, чтобы при виде этих заголовков от клиента, nginx, как и в
> случае с заголовками от бэкенда, тоже забывал что у него есть кэш и
> делал честный запрос (с этими же заголовками) к бэкенду, который уже
> отдаст обновленный кусок статики, который заменит то, что лежало в кэше
> nginx до этого.
>
> Задача выглядит тривиально, но ни документация ни гугл почемуто ответов
> мне не дали.
> Если данный функционал не реализован, то может кивнете в какое место
> кода такую проверку лучше вставить? Пока что в код не смотрел.
>
> Заранее спасибо за любую информацию.
>
>
> Система:
> nginx-0.7.60 (собран через "./configure --with-http_ssl_module")
> freebsd-6.3, x86-32
> apache-1 и apache-2 в качестве бэкендов на разные vhost'ы
Сейчас nginx игнорирует "Cache-Control: no-cache", пришедший от клиента.
Я планирую сделать поддержку обновления кэша с ограниченим, что-то вроде
server {
proxy_cache_reload {
192.168.1.0/24;
...
}
В этом случае запрос уйдёт на бэкенд и, если ответ будет успешным, то
кэш обновится. Пока же ответ обновляется, все получают старый ответ.
--
Игорь Сысоев
http://sysoev.ru
More information about the nginx-ru
mailing list