Итак, значит, есть у нас сервер с nginx и на нём сайтик. На сайте, кроме страничек есть статические файлики: картиночки, скриптики и цээсэсочки. Лежат они в своих папочках — /i/, /js/, /css/. Указываем браузеру, чтобы он их кэшировал получше и лишний раз к нам не обращался:
location ~^/(i|js|css)/ { expires 30d; } |
Но наши файлики могут периодически меняться. Чтобы клиент имел всегда свежую версию файла, используем GET-параметр с указанием «ревизии». В простейшем случае, это просто некий хэш от времени изменения файла. То есть, так указываем:
<script src="/js/my-super-script.js?ae12f"></script> |
Изменится файл — вместо «ae12f» другое подставится.
Всё отлично, но нашу идиллию разрушают упорные слухи о том, что, даже в наш просвещённый век, существуют прокси и клиенты, которые до сих пор считаю всё, где есть GET-параметры, динамическим содержимым. И не кэшируют это вообще.
Но извращенцы всегда найдут выход. Пишем в nginx’е:
rewrite ^/(i|css|js)/[0-9a-f]+/(.*)$ /$1/$2 last; |
А в ссылках теперь вместо /js/my-super-script.js?ae12f
указываем /js/ae12f/my-super-script.js
. Глупые прокси думают, что это просто статический файл в каталоге с идиотским именем. А наш nginx просто выкидывает этот каталог из пути.
Кто поделится менее дурацкими решениями по этому поводу?