Путь извращенца: антикэш в имени файла

Итак, значит, есть у нас сервер с 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 просто выкидывает этот каталог из пути.

Кто поделится менее дурацкими решениями по этому поводу?

Конфигурация сайта: конфигурация сервера

Продолжим, пожалуй, разговор про конфиги (часть 1, часть 2.1, часть 2.2).

На этот раз отвлечёмся от теории и перейдём к практике. Чтобы нам такое законфигурировать?

Законфигурируем, пожалуй, какую-нибудь конфигурацию :) Допустим, конфигурацию веб-сервера и пусть сервером этим будет Nginx.

Задача более конкретно:

  • Разрабатываем сайт example.ru
  • Я разрабатываю в своей локальной версии — go.example.local, а другой разработчик в своей — hugo.example.local + ещё верстальщик с дизайнером
  • Есть у нас общая локальная версия example.local на локальном сервере.
  • И есть тестовый поддомен test.example.ru, на котором заказчик проверяет последнии фишки, перед тем, как их зальют собственно на example.ru
  • test.example.ru находится в открытом доступе и его следует закрыть хотя бы с помощью htpasswd
  • Все загружаемые изображения лежат на поддомене «img.*», то есть img.example.ru, img.go.example.local и т.д.

Итак, у нас уже 7 версий сайта. Каждая на своём хосте. И для каждого хоста нужно иметь nginx-конфиг. Все конфиги имеют одинаковую структуру, но отличаются частностями.

Что мы будем их 7 раз копипастить и корректировать? А любое изменение в структуре вручную в каждую версию вносить? К чёрту! Давайте всё автоматизируем.
Остальной текст под катом