Отключение кеширования для отдельных картинок

Известно, что всякие статические картинки надо кешировать в браузере. Тогда сайт у посетителей, уже побывавший недавно у вас в гостях, будет работать быстрее (как минимум, не будут повторно грузится картинки, использованные в дизайне сайта и тому подобные). Но бывает и обратная ситуация — некоторые картинки нельзя кешировать, потому что в них содержится часто обновляема информация (например, такое часто бывает с какими-нибудь графиками).

Допустим, у нас nginx выступает в роли реверс-прокси перед Апачем. Хотя для ситуации, когда nginx отдаёт запросы на fastcgi, проблема может возникнуть та же и действия по её решению будут аналогичными.

Обычно для того, чтобы nginx сам отдавал статику (картинки, стили, скрипты, документы), не дергая Апач, в конфигурацию nginx добавляют примерно такой кусок:

location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js|pdf|doc|xls)$ {
  root /var/www/mysite/public_html/;
  expires 7d;
}

Нас тут более всего волнует expires 7d, ведь он прикажет браузеру не обновлять картинки в течение недели. Все картинки. Включая нашим злободневные графики.

И тут внимательный читатель уже понял, что можно написать location с исключениями, где поставить более короткий expires. Это верно. Но бывают более запутанные ситуации, когда длинный expires установлен не nginx`ом, а движком сайта или Апачем.

Тогда нам надо просто добавить location, в котором мы заголовок модифицируем принудительно. Чтобы получилось примерно так:

location ^~ /sites/default/files/graph/ {
  add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
  add_header Pragma "no-cache";
  proxy_pass http://127.0.0.1:8888;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Real-IP $remote_addr;
}

location / {
  proxy_pass http://127.0.0.1:8888;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Real-IP $remote_addr;
}

Первые пару строк первого location как раз допишут такие заголовки, чтоб картинки по урлам */sites/default/files/graph/… не закешировались.



Прокомментируйте: