Кэширование ускоряет повторные обращения к страницам и статическим ресурсам, снижает нагрузку на сервер и помогает управлять сроком актуальности данных. В руководстве разобраны HTTP-заголовки, Apache, Nginx, CMS, 1С-Битрикс, проверка ответов и безопасное обновление файлов.
Содержание
- Что такое кэширование и зачем его настраивать
- Ключевые заголовки HTTP для управления кэшем: Cache-Control, Expires и другие
- Настройка кэширования через .htaccess на сервере Apache
- Настройка кэширования на сервере Nginx
- Браузерное кэширование: управление кэшем на стороне пользователя
- Кэширование статических ресурсов: оптимальные настройки для CSS, JavaScript и изображений
- Настройка кэширования в популярных CMS: WordPress и другие системы
- Проверка и отладка: как убедиться, что кэширование работает правильно
- Практический чек-лист настройки кэширования
- Часто задаваемые вопросы о настройке кэширования
- Источники
Что такое кэширование и зачем его настраивать
Кэширование сайта — это временное хранение копий файлов и данных, которое позволяет быстрее отдавать ресурсы при повторных посещениях. Настройка кэширования повышает скорость загрузки сайта, уменьшает нагрузку на сервер; TTL задаёт срок актуальности, а CDN хранит часть контента ближе к пользователю. С помощью ккша веб-сервис использует ранее созданные копии; такой подход используется при создании ответа и быстрее передаёт информацию пользователю — это один из базовых методов ускорения.
Как работает кэш: от запроса до ответа браузера
- Браузер отправляет запрос к странице или файлу.
- Сервер возвращает ответ и заголовок Cache-Control.
- Кеш браузера сохраняет копию на время, указанное политикой.
- При повторном запросе браузер проверяет срок: cache hit — выдаёт сохранённый ресурс; cache miss — запрашивает свежую версию.
- Если срок истёк, сервер подтверждает актуальность или отдаёт изменённый файл.
- Браузерное кеширование хранит CSS, JavaScript, изображения и другие статические ресурсы на устройстве пользователя.
- Серверное кеширование: Redis или Memcached держат результаты обработки и кэширования данных в памяти.
- CDN кэширование распределяет копии файлов между узлами сети.
- Автокэширование и HTML-кеширование создают готовые версии страниц.
- В статье разберём браузер, сервер и CMS; API-кеш и базы данных останутся за рамками.
Кэши Outlook и uTorrent относятся к локальным приложениям пользователя и не управляют веб-ресурсами сайта.
Ключевые заголовки HTTP для управления кэшем: Cache-Control, Expires и другие
HTTP-заголовки задают правила, по которым браузер и сервер хранят либо проверяют ответ. Настройка кеширования использует Cache-Control как главный стандарт TTL; Expires, ETag и Last-Modified дополняют управление кэшем.
Директива Cache-Control: разбор значений и параметров
Cache-Control определяет параметры кэширования; в .htaccess его задают для групп файлов. max-age указывает TTL в секундах. Главное различие: no-cache допускает хранение, но требует проверки перед повторным использованием. no-store запрещает сохранять ответ. private на статических ресурсах за CDN исключает общий кеш и снижает его пользу. По умолчанию один ответ получает только те директивы, которые соответствуют типу контента и политике конфиденциальности.
| Значение | Описание | Когда использовать |
|---|---|---|
| public | Общий кеш | Версионные CSS, JavaScript, изображения |
| private | Кэш браузера | Персональные страницы |
| max-age=3600 | Свежесть 1 час | Часто меняющийся контент |
| s-maxage | TTL CDN | Общие ресурсы |
| must-revalidate | Проверка после срока | Актуальные данные |
| immutable | URL неизменяем | Файлы с хешем |
Cache-Control: public, max-age=31536000, immutable
Заголовок Expires: когда использовать вместо Cache-Control
Expires задаёт абсолютную дату окончания срока хранения: Expires: Fri, 01 Jan 2027 00:00:00 GMT. Он полезен для старых прокси. Когда сервер отправляет max-age или s-maxage, Cache-Control имеет приоритет. Точность периода зависит от синхронизации серверных часов. TTL остаётся параметром настройки и задаёт длительность жизни копии. Время кэширования для каждого ресурса зависит от значения max-age либо абсолютной даты Expires.
ETag и Last-Modified: инструменты условных запросов для экономии трафика
ETag передаёт идентификатор версии ресурса, Last-Modified — время изменения. Браузер отправляет If-None-Match или If-Modified-Since при проверке актуальности. Если версия не изменилась, сервер возвращает 304 Not Modified без тела ответа. ETag не зависит от точности времени и точнее описывает конкретную версию. Поэтому он удобен для условных запросов при частых обновлениях.
Настройка кэширования через .htaccess на сервере Apache
Настройка кэширования htaccess подходит для Apache на виртуальном хостинге. Файл .htaccess задаёт TTL и правила для кеша браузера. До изменений обязательно сохраните резервную копию. Кэширование htaccess используют, когда требуется настроить сроки хранения без правки основной конфигурации Apache. Правильная настройка кэширования начинается с сохранения резервной копии: она нужна для архивации исходных строк и быстрого восстановления. Эти строки можно быстро вернуть при откате.
Подключение модуля mod_expires и директива ExpiresActive
Для mod_expires вставьте блок в корневой .htaccess. ExpiresActive On включает заголовки Expires и max-age, а директивы задают TTL. Обёртка IfModule сохраняет работоспособность сайта, когда модуль Apache недоступен. Наличие модуля уточните через phpinfo() у хостинга или его поддержки. Если хотите уточнить параметры, проверьте в панели хостинга, где находится файл и какие дополнительные модули подключены в рамках услуги веб-хостинга.
<IfModule mod_expires.c>
ExpiresActive On
</IfModule>
Настройка ExpiresDefault и ExpiresByType для разных типов файлов
ExpiresDefault действует на все типы, когда точного правила ExpiresByType нет. access отсчитывает время кэширования от запроса пользователя, modification — от изменения файла. Для JPEG, PNG и GIF задайте год. CSS и JavaScript храните год при именах с версией или хешем. HTML, XML и JSON обновляйте сразу. Кеширование файлов с долгим сроком хранения требует версии URL, чтобы пользователь получил актуальный ресурс после публикации.
<IfModule mod_expires.c>
ExpiresDefault "access plus 0 seconds"
# Изображения
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
# CSS и JavaScript
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
# Динамические типы
ExpiresByType text/html "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType application/json "access plus 0 seconds"
</IfModule>
Добавление правил Cache-Control через mod_headers в .htaccess
mod_headers добавляет заголовки кэширования в .htaccess. Header set заменяет существующее значение, Header append присоединяет новое. Применяйте set для одного Cache-Control. Не назначайте несовместимые max-age через mod_expires и mod_headers одному MIME-типу. При настройке кэширования один URL не должен получать несколько несовместимых строк Cache-Control.
<IfModule mod_headers.c>
<FilesMatch "\.(css|js|jpe?g|png|gif|svg|woff2?)$">
Header set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>
<FilesMatch "\.(html?|xml)$">
Header set Cache-Control "no-cache, must-revalidate"
</FilesMatch>
</IfModule>
Пример готового блока .htaccess для кэширования статических ресурсов
Ниже приведена стартовая конфигурация кэширования файлов. Она задаёт сроки для статических ресурсов и включает сжатие текстовых ответов. После сохранения очистите кеш браузера, проверьте ответ сервера в инструментах разработчика, затем скорректируйте сроки под частоту изменений контента.
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 0 seconds"
# Изображения
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
# Шрифты
ExpiresByType font/woff "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
# CSS и JavaScript
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
# HTML и XML
ExpiresByType text/html "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
</IfModule>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain text/html text/css
AddOutputFilterByType DEFLATE text/javascript application/javascript
AddOutputFilterByType DEFLATE application/json application/xml image/svg+xml
</IfModule>
Настройка кэширования на сервере Nginx
После Apache настройка кэширования Nginx выполняется в nginx.conf или файле виртуального хоста. Для VPS она снижает нагрузку. Для кэширования через Nginx правила задают на уровне сервера или конкретного location-блока.
Директива expires в конфигурации Nginx: синтаксис и примеры
location ~* .(css|js|jpe?g|png|gif|svg|woff2?)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
expires задаёт TTL и max-age, add_header дополняет политику. 1y, 30d, 2h, 60m, 3600s. Проверьте nginx -t, затем nginx -s reload.
Настройка proxy_cache и fastcgi_cache для кэширования динамических страниц
В http задают fastcgi_cache_path, в PHP location включают fastcgi_cache. Он отдаёт готовый HTML без PHP и SQL, снижая нагрузку. Исключите авторизацию, корзину, оформление и POST.
# http
fastcgi_cache_path /var/cache/nginx keys_zone=page_cache:10m;
# PHP location
fastcgi_cache page_cache;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_valid 200 10m;
В опубликованном тесте FastCGI-кэш уменьшил TTFB с 1250 до 5 мс и CPU примерно со 100% до 5%. Результат зависит от сайта и оборудования.
Memcached и Redis: серверное кеширование данных в оперативной памяти
FastCGI кэширует страницы, а Memcached и Redis применяются для кэширования данных в памяти: запросов, сессий и объектов.
- Memcached: простой кэш ключ-значение.
- Redis: структуры данных, репликация и постоянное хранение.
- Настройка: проверьте сервис, укажите подключение в CMS, установите плагин.
Redis полезен, когда приложению нужны структуры данных, репликация и сохранение. Эффект оценивают по метрикам после настройки.
Браузерное кэширование: управление кэшем на стороне пользователя
Браузерное кеширование ускоряет повторные посещения: кэш браузера использует копии ресурсов, а настройка кэширования на сервере задаёт через HTTP-заголовки, сколько они остаются свежими. TTL определяет этот период. Преимущества кэширования заметны при повторных переходах: браузер извлекает статические файлы локально и сокращает число сетевых запросов.
Жизненный цикл браузерного кеша: алгоритм принятия решений браузером
Freshness означает, что TTL ещё не истёк. Тогда браузер берёт файл локально; при устаревшей копии отправляет условный запрос и после 304 Not Modified использует сохранённый ответ; при отсутствии кэша загружает ресурс полностью. Для проверки Ctrl+Shift+R выполняет жёсткую перезагрузку и обходит кэш.
Инструменты разработчика в браузере для проверки кэша: DevTools и Network
- Откройте DevTools.
- Перейдите в Network и обновите страницу.
- Выберите нужный файл, затем Headers.
- Проверьте Cache-Control, Expires, ETag, Last-Modified, Age и X-Cache.
Кэширование статических ресурсов: оптимальные настройки для CSS, JavaScript и изображений
Статические ресурсы редко меняются, поэтому настройка кэширования ускоряет повторную загрузку сайта. TTL задаёт срок хранения в кэше браузера, cache busting обновляет версии.
Оптимальные периоды хранения кэша для разных типов файлов
Чем стабильнее файл, тем больше срок кэширования.
| Тип | Расширения | TTL | Примечание |
|---|---|---|---|
| Изображения | jpg, png, gif, svg | 1 год, 31536000 | Версия URL |
| CSS, JavaScript | css, js | 1 год, 31536000 | Fingerprinting |
| HTML | html | 0–1 час | Иначе устаревает |
| JSON/API | json | no-cache | Проверка |
Время жизни кеша (TTL): рекомендации по типам контента сайта
TTL — период свежести ответа без нового запроса. Автокэширование и HTML-кеширование CMS назначают разные TTL:
- Статьи: 1–7 дней.
- Каталог: 1–12 часов.
- Главная: 1–4 часа.
- Новости, блог: 30–60 минут.
- Корзина, кабинет: private, no-store.
Для e-commerce 2 часа для каталога часто сохраняют баланс скорости и актуальности.
Cache Busting: версионирование файлов для управления обновлениями кэша
Новый HTML со старым CSS может сломать вёрстку до окончания TTL. Cache busting меняет URL файла.
- Query string: app.css?v=42. Прост, зависит от CDN.
- Fingerprinting: app.4f3a9c.css. Надёжен.
- Версия пути: /v2/app.css. Для крупных релизов.
PHP: <link href="/app.css?v=<?= filemtime('app.css') ?>" rel="stylesheet">
Webpack: output: { filename: '[name].[contenthash].js' }
Настройка кэширования в популярных CMS: WordPress и другие системы
Когда доступа к серверу нет, настройка кэширования выполняется через панель управления CMS. Панель позволяет создать правила обновления и включить дополнительные механизмы хранения по умолчанию. Ниже — WordPress, Joomla, Drupal, OpenCart и отдельный блок для 1С-Битрикс.
Плагины кэширования для WordPress: обзор и настройка
- WP Rocket, платный. Совместим с большинством хостингов, быстро включает page cache, TTL, оптимизацию CSS и JavaScript. Сложность: низкая.
- LiteSpeed Cache, бесплатный. Максимум даёт на LiteSpeed, OpenLiteSpeed или через QUIC.cloud. Есть кэш браузера, оптимизация изображений, CSS и JavaScript. Сложность: средняя.
- W3 Total Cache, бесплатный. Гибкий плагин кэширования с page cache, browser cache, object cache и CDN. Сложность: высокая.
Для WP Rocket: установите плагин, включите кэш страниц, задайте cache lifespan, включайте минификацию CSS/JS поэтапно, сохраните параметры. Опции лучше подключать по одной, чтобы сразу найти несовместимый модуль темы или конструктора.
Кэширование в других CMS: Joomla, Drupal, OpenCart
- Joomla: System, Global Configuration, Cache. Укажите обработчик и TTL.
- Drupal: Configuration, Performance, Caching. Задайте maximum age.
- OpenCart: System, Settings, Server. Включите template cache и route cache.
Настройка кэширования в 1С-Битрикс: автокэш, HTML-кэш и композитный режим
- Автокэширование: 1С-Битрикс сохраняет тяжёлые результаты выборки и вычислений. Путь: Администрирование, Настройки, Настройки продукта, Автокэширование. Главный параметр — режим работы кэша.
- HTML-кеширование: готовая HTML-страница хранится для неавторизованных пользователей. Путь: Настройки, Главный модуль, вкладка Кеширование. Укажите время жизни кэша и исключения.
- Кеширование компонентов: настройка идёт в параметрах компонента. CACHE_TYPE задаёт режим, CACHE_TIME задаёт TTL в секундах. Корзину, авторизацию и персональные блоки не кэшируют.
- Композитный режим: страница отдаётся как статический HTML, а динамические зоны, например авторизация и корзина, подгружаются через AJAX. Путь: Marketplace, Композитный сайт, настройка динамических областей.
Для нагруженного проекта на 1С-Битрикс чаще используют связку HTML-кэширование плюс Композитный режим.
Проверка и отладка: как убедиться, что кэширование работает правильно
Настройка кэширования завершается проверкой: она подтверждает заголовки, TTL и выдачу кэша браузера. Используйте сервисы и DevTools.
Онлайн-инструменты для проверки кэша: GTmetrix, PageSpeed Insights и другие сервисы
- GTmetrix: начните с waterfall и ответов сервера.
- PageSpeed Insights: оценивает LCP, INP, CLS и рекомендации по скорости.
- WebPageTest: сравнивает загрузку из разных локаций и раскрывает запросы.
- KeyCDN Cache Checker: показывает Cache-Control, Expires.
- Varvy Speed Tool: проверяет политику браузерного кэширования.
Типичные ошибки при настройке кэширования и способы их устранения
- Конфликт Cache-Control и Pragma: no-cache. Проверьте .htaccess, CDN, CMS и сервер.
- Ресурс не кэшируется. Уточните FilesMatch или location для расширения.
- После релиза виден старый CSS. Добавьте версию или хеш в имя файла.
- Личный кабинет отдаёт чужие данные. Для авторизации задайте private, no-store. В 1С-Битрикс исключите корзину и персональные компоненты.
- API возвращает устаревшие сведения. Укажите Cache-Control: no-cache.
Проверка корректности работы сайта после настройки кэша
В инкогнито имитируйте нового пользователя: агрессивный кэш иногда нарушает формы и персональные блоки.
- Сравните загрузку в DevTools и GTmetrix.
- Отправьте форму и проверьте CSRF-токен.
- Выполните поиск по сайту.
- Авторизуйтесь и откройте кабинет.
- Проверьте актуальность мета-тегов.
- Повторно загрузите страницу и посмотрите статус ресурсов.
Практический чек-лист настройки кэширования
Анализ
- Проверьте заголовки.
- Определите сервер.
Сервер 6. Настройте .htaccess. 7. Добавьте Nginx fastcgi_cache. 8. Подключите Redis или Memcached.
CMS 9. Включите WordPress-плагин. 10. В 1С-Битрикс активируйте Автокэширование. 11. Включите HTML-кеширование, Композитный режим.
Обновления 12. Версионируйте файлы.
Проверка 13. Подключите CDN. 14. Проверьте DevTools. 15. Повторите GTmetrix в инкогнито.
План занимает 30 минут–2 часа, снижает нагрузку на сервер и ускоряет сайт.
Часто задаваемые вопросы о настройке кэширования
Кеширование сохраняет копии страниц, файлов и ответов, чтобы повторный запрос обрабатывался быстрее. Настройка кэширования уменьшает число обращений к серверу, снижает нагрузку и помогает сократить скорость загрузки сайта. Для браузера правила задают HTTP-заголовки, для CMS — собственные механизмы хранения и обновления данных.
TTL задаёт срок, когда сохранённый ответ считается свежим. Укажите Cache-Control: max-age=3600 для ресурса с периодом один час или max-age=31536000 для версионных статических файлов. Для каталога часто выбирают 1–12 часов, для новостей — 30–60 минут, для HTML срок зависит от частоты изменений.
Автокэширование в 1С-Битрикс хранит результаты работы компонентов и обновляет их по времени либо при изменении данных. HTML-кэширование сохраняет готовую страницу для гостей. Композитный режим отдаёт статическую оболочку сразу, а персональные области, например корзину и авторизацию, получает через AJAX.
Откройте Настройки → Настройки продукта → Композитный сайт, выберите автоматический или ручной режим и нажмите кнопку включения на нужной вкладке. До запуска очистите кэш компонентов. Затем обозначьте динамические зоны, проверьте список композитных страниц и при необходимости откройте раздел «Отладка» для диагностики.
Перейдите в Настройки → Настройки продукта → Автокэширование → Очистка файлов кэша. Выберите «Только устаревшие», «Все», «Весь управляемый» либо «Все страницы HTML кэша» по задаче. Для отдельной страницы используйте кнопку «Сбросить кэш» в панели управления. Ручная очистка каталогов требует понимания состава хранилища.
В параметрах компонента задайте CACHE_TYPE: A для автоматического и управляемого режима, Y для кэширования по времени или N для отключения. Поле CACHE_TIME определяет TTL в секундах: например, 3600 для одного часа. Для компонентов с правами доступа настройте CACHE_GROUPS, чтобы разделять варианты выдачи.
Не кэшируйте корзину, авторизацию, личный кабинет, оформление заказа, формы с CSRF-токенами, персональные цены и блоки с данными текущего пользователя. Для таких URL используйте Cache-Control: private, no-store. В композитном режиме их помещают в динамические зоны, где сведения подгружаются отдельным запросом.
Да, базовую настройку можно выполнить через плагины WordPress, инструменты Joomla, Drupal, OpenCart и панель 1С-Битрикс. Настройку кэширования можно также выполнить через панель CMS без доступа к серверу. Включите кэш страниц, задайте TTL, автокэширование и очистку после публикации. CDN также добавляет правила на уровне сети. Полный контроль заголовков Cache-Control иногда требует хостинга или доступа к конфигурации.
Полные страницы авторизованных пользователей обычно не передают в общий кэш: их содержание зависит от сессии, роли и данных аккаунта. Для браузера применяйте private, no-store либо no-cache согласно сценарию. Композитный режим 1С-Битрикс позволяет кэшировать общую HTML-часть, сохраняя личные блоки динамическими.
Google не устанавливает единый максимальный срок для всех ресурсов. Для редко меняющихся статических файлов рекомендации Google — минимум одна неделя, предпочтительно до одного года; Lighthouse показывает max-age=31536000. Применяйте такой срок только с версионированием имени файла, например app.4f3a9c.css. HTML, API и персональные данные требуют более короткой политики.

