Ключевые слова: Cache‑Control, max‑age, Apache 2, mod_headers, кэширование, настройка заголовков, оптимизация скорости, серверные настройки
Почему max‑age важен для производительности сайта
Когда браузер или промежуточный прокси‑сервер сохраняет страницу, он использует директиву max‑age из заголовка Cache‑Control.
- Слишком большой срок - пользователь может видеть устаревший контент.
- Слишком короткий срок - каждый запрос идёт к серверу, что замедляет загрузку.
Оптимальная настройка позволяет сократить количество запросов и одновременно гарантировать актуальность данных.
1. Подключаем модуль mod_headers
Для изменения заголовков Apache 2 нужен модуль mod_headers. Он не включён по‑умолчанию, поэтому его необходимо активировать:
sudo a2enmod headers # включаем модульsudo systemctl restart apache2 # перезапускаем сервис
Проверить, что модуль запущен, можно командой:
a2query -m headers
Ответ headers (enabled by site administrator) подтверждает успешную активацию.
2. Добавляем заголовок Cache‑Control
Самый надёжный способ - прописать правило в конфигурации виртуального хоста (обычно /etc/apache2/sites-enabled/000-default.conf).
2.1. Общий параметр для всего сайта
<Directory /var/www/html> Header set Cache-Control "max-age=86400"</Directory>
Здесь 86400 - количество секунд в 24 часа (60 × 60 × 24).
2.2. Защита от отсутствия модуля
Если модуль случайно отключён, сервер может не запуститься. Чтобы избежать ошибки, оберните правило в IfModule:
<Directory /var/www/html> <IfModule headers_module> Header set Cache-Control "max-age=86400" </IfModule></Directory>
3. Разные сроки для разных типов файлов
Часто изображения, шрифты и скрипты кэшируются дольше, чем HTML‑страницы. Пример для популярных форматов изображений (одна неделя):
<FilesMatch "\.(ico|png|jpe?g|webp)$"> Header set Cache-Control "max-age=604800"</FilesMatch>
604800 секунд = 7 дней.
4. Таблица часто‑используемых значений
| Период | Секунд |
|---|---|
| 5 минут | 300 |
| 10 минут | 600 |
| 30 минут | 1800 |
| 1 час | 3600 |
| 12 часов | 43200 |
| 24 часа | 86400 |
| 3 дня | 259200 |
| 7 дней | 604800 |
| 30 дней | 2592000 |
Эти цифры удобно копировать в конфигурацию без лишних вычислений.
5. Отключение кэширования
Если нужно полностью запретить хранение ответа, используйте один из вариантов:
Header set Cache-Control "no-cache"# илиHeader set Cache-Control "max-age=0"
Оба действия заставят браузер запрашивать ресурс каждый раз.
6. Публичный vs приватный кэш
public- контент может храниться в общих кэширующих слоях (прокси, CDN). Подходит для статических файлов, доступных всем пользователям.private- кэш сохраняется только в браузере конкретного пользователя. Используется для персонализированных страниц (например, после авторизации).
Пример для публичных ресурсов:
Header set Cache-Control "max-age=86400, public"
Пример для персонализированных страниц:
Header set Cache-Control "max-age=86400, private"
7. Проверяем работу заголовков
После внесения изменений запустите:
curl -I https://yourdomain.com/path/to/file
В ответе должно быть строка вида:
Cache-Control: max-age=86400, public
Если заголовок отсутствует, проверьте синтаксис конфигурации и убедитесь, что mod_headers действительно включён.
8. Лучшие практики для 2027 года
- Минимизировать количество "no‑cache" - избыточные запросы ухудшают показатель Core Web Vitals.
- Разносить сроки кэширования - короткие для HTML, длинные для статических ресурсов.
- Использовать ETag и Last‑Modified в совокупности с
max‑ageдля гибкой проверки актуальности. - Тестировать на реальных пользователях - инструменты Chrome DevTools и Lighthouse покажут, как кэш влияет на загрузку.
Следуя этим рекомендациям, вы получите быстрый, надёжный сайт, который удовлетворит требования Google EEAT и Helpful Content Update в 2027 году.
