Как настроить заголовки Cache-Control в Apache — CloudSavvy IT

1 min


апаш

Браузер каждого пользователя использует встроенный кэш для хранения загруженных объектов, что может значительно ускорить повторные посещения вашего веб-сайта при загрузке с диска, а не из сети. Вот как это настроить в Apache.

Как работает кэширование?

Когда пользователь впервые подключается к вашему сайту, он загружает все статические ресурсы, необходимые для отображения страницы, включая такие элементы, как ваш логотип. Когда они переходят на новую страницу, он загружает ваш логотип из памяти, а не запрашивает его снова, значительно ускоряя производительность и снижая нагрузку на ваш веб-сервер в процессе работы.

Это кэш на стороне клиента, но многие сайты также будут использовать сеть доставки контента или CDN. CDN — это сеть серверов, которые находятся перед вашим основным веб-сервером или «исходным» сервером. Эта сеть кэширует ваши страницы, увеличивая максимальную пропускную способность, уменьшая задержку доступа и значительно уменьшая нагрузку на исходный сервер. Если вы хотите узнать больше о CDN, вы можете прочитать наше руководство по ним здесь.

Cache-Control это заголовок, который вы можете настроить на своем веб-сервере для добавления ко всем исходящим запросам, который сообщит браузеру и CDN, как кэшировать ваш контент.

Некоторые страницы должны никогда кэшироваться общими кешами, такими как CDN. Это рискует отображение личной информации одного пользователя другим, Как правило, если страница будет одинаковой для всех пользователей, как и ваша домашняя страница, вы можете ее кэшировать. Если он отображает конфиденциальную информацию о пользователях, вы можете занести ее в черный список. Статические ресурсы, такие как CSS и изображения, обычно могут кэшироваться для всех, часто гораздо дольше.

Количество времени, которое объект проводит в кеше, также важно. Называется «время жизни» (TTL), максимальный возраст ваших кэшированных ресурсов определяет, как долго объект будет оставаться в кэше, прежде чем будет признан недействительным, и побуждает пользователя запрашивать новый объект. Для статических ресурсов, которые не сильно меняются, вы можете установить очень высокие значения TTL, обычно около двух лет. Для вещей, которые вы, возможно, захотите обновить, вам нужно установить более низкие значения TTL, чтобы устаревшие ресурсы не находились в кэше слишком долго.

Вы всегда можете использовать версионные имена файлов для запуска перезагрузки кэша. Если вы выпускаете новую версию таблицы стилей CSS, вы можете назвать ее styles-1.0.1.cssи браузер пользователя (и любые CDN перед ним) увидит его как новый файл, который необходимо повторно загрузить. Кроме того, для некоторых CDN вы можете выполнить ручную аннулирование, чтобы очистить существующий кеш без изменения имен файлов.

Как использовать Cache-Control в Apache

Cache-Control имеет несколько вариантов:

  • public — Может кэшироваться кем угодно, включая браузеры и CDN. Используйте это для большинства статических объектов.
  • private — Содержит конфиденциальные данные, которые не могут быть кэшированы CDN или обратными прокси. Браузер пользователя может кэшировать его локально. Используйте это для большинства аутентифицированных страниц.
  • no-cache — Несмотря на название, он не отключает кеширование. Браузер может по-прежнему кэшировать ответ на производительность, но должен проверить наличие обновлений на исходном сервере перед его использованием. Используйте это, если вы хотите, чтобы пользователь проходил повторную проверку каждый раз.
  • no-store — Отключает кеширование полностью. Используйте это только для конфиденциальных данных, которые не следует отправлять дважды.

Кроме того, вы можете добавить no-transform директива, которая запрещает любые преобразования, которые могут быть сделаны к ресурсу. Например, некоторые CDN сжимают образы, чтобы уменьшить пропускную способность. Эта директива отключает такое поведение.

В Apache вам придется установить этот заголовок вручную, используя Header set директива, вот так:

Header set Cache-Control "max-age=84600, public"

max-age значение задается в секундах, например, max-age=300 для пятиминутного TTL, и max-age=63072000 два года.

Вы можете поместить эту директиву в корень вашей конфигурации, чтобы применить ее ко всему сайту, но лучшим способом является применение настроек в зависимости от типа файла. Например, чтобы установить высокий TTL для большинства статических носителей, вы можете использовать FilesMatch блок:


  Header set Cache-Control "max-age=63072000, public"

Если вы хотите занести в черный список определенный путь от кэширования CDN, вы можете использовать Directory блок:

<Directory "/private">
 Header set Cache-Control "max-age=300, private"
Directory>

Или просто сопоставьте один файл:

"protected.html">
Header set Cache-Control "max-age=300, private"
File>

Блоки с более конкретными совпадениями будут иметь приоритет над общими совпадениями с регулярными выражениями, но вы хотите убедиться, что все правильно установлено на принимающей стороне. Вы можете проверить это в DevTools Chrome, в разделе Сеть> Заголовки.

вкладка сети Chrome Devtools

Если у вас есть только доступ к .htaccess конфигурации, вы все равно можете использовать сопоставление каталогов, создав новый .htaccess файл в каждом подкаталоге.

Используйте суррогатное управление для непосредственного изменения поведения CDN

Surrogate-Control функции заголовка точно так же, как Cache-Control, но детализирует конкретные инструкции для CDN и обратных прокси, а не для конечных пользователей. Таким образом, вы можете указать CDN делать что-то одно, но отправлять в браузер разные указания.

Вы должны будете установить этот заголовок вручную, так же, как вы установили Cache-Control:

Header set Surrogate-Control "max-age=300, public"

Вы определенно захотите проверить с вашим CDN, чтобы убедиться, что это работает —Surrogate-Control является довольно новым и не универсальным.


0 Comments

Ваш адрес email не будет опубликован. Обязательные поля помечены *