Отключение кеширования для отдельных картинок
Известно, что всякие статические картинки надо кешировать в браузере. Тогда сайт у посетителей, уже побывавший недавно у вас в гостях, будет работать быстрее (как минимум, не будут повторно грузится картинки, использованные в дизайне сайта и тому подобные). Но бывает и обратная ситуация — некоторые картинки нельзя кешировать, потому что в них содержится часто обновляема информация (например, такое часто бывает с какими-нибудь графиками).
Допустим, у нас 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/… не закешировались.