Обновление кэша nginx 0.7.X засчет заголовков запроса

Mike Kazantsev Kazantsev_MS at office.beeline.ru
Mon Jun 22 12:03:01 MSD 2009


Добрый день,

Подскажите, как заставить 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'ы





More information about the nginx-ru mailing list