Кеширование и очистка кеша
Настройка кеширования на пограничных узлах и в браузере, ключей кеша и отрицательного кеширования; очистка по URL, шаблону или для всего сайта.
Настройки кеширования находятся на вкладке Кэш страницы сведений о сайте (/cdn/domains/<domain>/cache). Они применяются ко всем именам хостов сайта. После внесения изменений нажмите Сохранить настройки внизу страницы. Чтобы новый контент стал доступен немедленно, нажмите Очистить кеш в правом верхнем углу.
Кеширование на пограничных узлах
| Настройка | Описание |
|---|---|
| Периферийный кэш | Автоматически: кеширование на основе заголовков ответа исходного сервера. Включить: кеширование включено. Отключить: пограничные узлы ничего не кешируют. |
| Отдавать устаревший кеш при сбое сервера-источника | Если исходный сервер не отвечает вовремя или возвращает 500/502/503/504, пограничный узел выдает устаревшую кешированную копию вместо страницы ошибки. Включено по умолчанию. |
| Режим времени кэширования | Способ определения срока хранения в кеше. См. следующую таблицу. |
| Время кэширования (сек.) | Заданное значение, используемое режимом TTL. Кнопки быстрого выбора устанавливают 1 час, 1 день или 7 дней. |
Режимы TTL кеша:
| Режим | Поведение |
|---|---|
| Как на исходном сервере или по умолчанию | Использовать срок из заголовков Cache-Control / Expires исходного сервера. Если срок не указан, использовать заданное значение. |
| Фиксированный | Игнорировать значение исходного сервера и всегда использовать заданное значение. |
| Как на исходном сервере | Строго следовать указаниям исходного сервера. Если ответ не помечен как допускающий кеширование, он не кешируется. |
| Использовать минимум / Использовать максимум | Использовать меньшее или большее из двух значений: срока исходного сервера и заданного значения. Если исходный сервер не указал срок, использовать заданное значение. |
Кеширование по типу файла
В разделе Кеширование по типам файлов можно задать срок хранения для каждого расширения, например 7 дней для jpg,png,gif. Пограничный узел применяет его, если ответ исходного сервера не содержит явно заданного срока хранения (нет max-age, s-maxage или Expires). Если исходный сервер указал срок, его значение имеет приоритет.
Ответы, которые никогда не кешируются
Следующие ответы никогда не попадают в кеш пограничных узлов независимо от настроек:
- Ответы исходного сервера с
Cache-Control: no-storeилиprivate - Ответы, устанавливающие cookie (
Set-Cookie) - Ответы
206 Partial Contentна запросы Range - Запросы с методами, отличными от GET и HEAD
Кеширование в браузере
Параметр Кеш браузера определяет, добавляет ли пограничный узел заголовок Cache-Control для браузеров:
- Включить: для ответов, которые действительно были сохранены в кеше пограничного узла, добавляется
Cache-Control: public, max-age=<edge TTL>, если исходный сервер не передалCache-Control. TTL пограничного узла — это срок, в течение которого сам узел хранит ответ, поэтому срок хранения в браузере совпадает с ним. - Автоматически или Отключить: пограничный узел не добавляет заголовки кеширования в браузере.
Собственный заголовок Cache-Control исходного сервера всегда передается браузеру без изменений. Пограничный узел никогда не добавляет заголовок кеширования в браузере в следующих случаях:
- Ответы, которые он не кешировал, например ответы динамических API
- Запросы с методами, отличными от GET и HEAD
- Ответы со статусом 400 и выше
- Ответы, устанавливающие cookie
Это предотвращает сохранение динамического контента в кеше браузера на нежелательный срок.
Самый надежный способ задать длительное кеширование статических ресурсов в браузере — настроить исходный сервер на отправку явного заголовка Cache-Control: max-age=... для этих ресурсов.
Ключ кеша
Ключ кеша определяет, какие запросы используют одну кешированную копию. Предварительный просмотр внизу раздела показывает состав ключа при текущих настройках.
Режим обработки строки запроса:
| Режим | Поведение | Пример |
|---|---|---|
| Стандартный | Сохранять все параметры запроса без изменений | ?a=3 и ?a=4 кешируются отдельно |
| Игнорировать | Игнорировать все параметры запроса | ?a=3 и ?a=4 используют одну копию |
| Сортировка | Сохранять все параметры, сортируя по имени | ?b=2&a=1 и ?a=1&b=2 используют одну копию |
| Список разрешённых | Сохранять только перечисленные параметры | id,page |
| Чёрный список | Исключать перечисленные параметры | utm_source,utm_medium,ref |
Разделяйте имена параметров запятыми.
Также кеш можно разделять по следующим признакам:
- Различать по типам устройств: отдельные копии для мобильных и настольных устройств.
- Различать по странам: отдельные копии для каждой страны или региона посетителя.
- Различать по языкам: отдельные копии по значению
Accept-Language. - Режим хоста в кэше: определяет, какое имя хоста включается в ключ:
- Исходный запрос: Host, запрошенный посетителем. Это значение по умолчанию.
- После разрешения DNS: имя хоста, по которому был найден сайт.
- Заголовок Host: Host, используемый в запросе к исходному серверу.
Каждый дополнительный признак может разделить один URL на несколько кешированных копий, что снижает долю попаданий в кеш. Включайте только необходимые признаки.
Расширенные настройки и отрицательное кеширование
| Настройка | Описание |
|---|---|
| Кеширование по кодам ответа (негативное кеширование) | Срок хранения в кеше в секундах для определенных кодов статуса, например 404 или 301. Имеет приоритет перед всеми остальными настройками TTL и предотвращает повторные обращения к исходному серверу за ответами с ошибками. |
| min_ttl / max_ttl | Нижняя и верхняя границы итогового срока хранения в кеше. 0 означает отсутствие границы. |
| stale_if_error | При сбое исходного сервера продолжать выдачу устаревшего контента в течение указанного количества секунд. |
| Не кэшировать при наличии Authorization | Запросы с заголовком Authorization направляются к исходному серверу в обход кеша. |
| Учитывать no-cache клиента | Запросы с Cache-Control: no-cache обходят кеш. |
| Сессионные Cookie для обхода кэша | Запросы, содержащие любую из перечисленных cookie, например session или token, обходят кеш. |
Защита исходного сервера (Origin Shield)
Параметр Максимум одновременных запросов к источнику ограничивает число запросов одного сайта, которые могут одновременно выполняться на исходном сервере. 0 означает отсутствие ограничения.
При превышении лимита по очереди применяются действия из Действия при превышении (поэтапно):
- cache_first: выдать ответ из кеша.
- queue: ожидать в очереди. Можно задать длину очереди и максимальное время ожидания в миллисекундах.
- challenge: показать проверку на бота.
- block: заблокировать запрос и вернуть заданное время Retry-After.
Используйте эту функцию для защиты исходных серверов с ограниченной производительностью.
Очистка кеша
Изменение настроек кеширования не делает уже закешированный контент недействительным. Чтобы пограничные узлы загрузили свежий контент с исходного сервера:
- На вкладке Кеш нажмите Очистить кеш в правом верхнем углу. В списке Домены и на вкладке Обзор также доступна очистка кеша всего сайта одним нажатием.
- Выберите тип очистки:
- Очистить кеш всего сайта: удалить весь кешированный контент сайта.
- Очистить по URL: введите по одному URL в строке. Можно использовать полный URL (
https://example.com/css/app.css) или путь (/css/app.css).
- Нажмите Подтвердить очистку.
Правила сопоставления при очистке по URL:
- Со строкой запроса (например,
/list?page=2): удаляется только копия для данной комбинации параметров. Перед сопоставлением строка запроса нормализуется в соответствии с режимом обработки строки запроса сайта. - Без строки запроса (например,
/list): удаляются все варианты этого пути с любыми строками запроса. - Шаблоны: для очистки по шаблону укажите одну строку, содержащую
*, напримерhttps://example.com/static/*для всего содержимого каталога. Если*содержится более чем в одной строке, выполняется очистка кеша всего сайта.
Команда очистки распространяется на все пограничные узлы в фоновом режиме и обычно выполняется за несколько секунд. После этого проверьте заголовок ответа X-Cache-Status с помощью curl -I. Первый запрос должен показать MISS.
Сразу после очистки кеша всего сайта каждый запрос направляется к исходному серверу, поэтому нагрузка на него заметно возрастает. Если изменились лишь несколько файлов, очистите кеш только для их URL.
Связанные разделы
- Настройка срока хранения в кеше или браузере для отдельных путей: Правила страниц
- Проверка доли попаданий в кеш: Журналы и аналитика