Кеширование — это одна из самых простых и при этом самых эффективных оптимизаций сайта.
Независимо от того, на чём он написан — PHP, Laravel, WordPress, SPA или просто HTML — принципы кеширования одинаковые.
Что именно мы кешируем
В этой статье речь идёт о browser cache, то есть кешировании на стороне браузера.
Обычно сюда входят:
- изображения;
- CSS;
- JavaScript;
- шрифты;
- другие статические файлы.
Зачем это нужно:
- браузер не скачивает одни и те же файлы при каждом заходе;
- повторные визиты становятся заметно быстрее;
- уменьшается количество запросов к серверу;
- PageSpeed и Lighthouse перестают ругаться на отсутствие cache policy.
HTML-страницы и динамический контент — это уже page cache, он настраивается отдельно и зависит от сервера или приложения.
Apache
Apache часто используется на shared-хостингах и удобен тем, что позволяет управлять кешированием через .htaccess.
Файл .htaccess находится в корне сайта (например, public_html/.htaccess).
mod_expires
mod_expires позволяет указать браузеру, как долго можно хранить файлы локально и не запрашивать их повторно с сервера.
Базовое кеширование:
1<IfModule mod_expires.c>
2 ExpiresActive On
3
4 ExpiresByType image/jpeg "access plus 1 year"
5 ExpiresByType image/png "access plus 1 year"
6 ExpiresByType image/gif "access plus 1 year"
7 ExpiresByType image/webp "access plus 1 year"
8 ExpiresByType image/svg+xml "access plus 1 year"
9 ExpiresByType image/x-icon "access plus 1 year"
10
11 ExpiresByType font/woff2 "access plus 1 year"
12 ExpiresByType font/woff "access plus 1 year"
13
14 ExpiresByType text/css "access plus 1 month"
15 ExpiresByType application/javascript "access plus 1 month"
16
17 ExpiresDefault "access plus 7 days"
18</IfModule>
Важно понимать: mod_expires управляет только браузерным кешем и не кеширует HTML-страницы.
Cache Control
Cache-Control — это дополнительный и более современный HTTP-заголовок, который явно говорит браузеру и прокси, как можно кешировать файл.
Современные инструменты анализа скорости учитывают именно Cache-Control.
1<IfModule mod_headers.c>
2 <FilesMatch "\.(css|js|jpg|jpeg|png|gif|webp|svg|ico|woff2|woff)$">
3 Header set Cache-Control "public, max-age=31536000"
4 </FilesMatch>
5</IfModule>
Nginx
Если сайт работает на Nginx, важно понимать одну вещь, в отличие от Apache, здесь нет .htaccess, и все правила кеширования задаются на уровне конфигурации сервера.
На shared-хостингах доступ к конфигурационным файлам Nginx, как правило, отсутствует.
Поэтому вместо попыток “найти конфиг” правильный и безопасный путь — обратиться в службу поддержки хостинга
Правила кеширования нужно добавлять ВНУТРИ блока server { ... },
обычно после root и index, но до location ~ \.php$.
Пример конфигурационного файла:
1server {
2 listen 80;
3 server_name example.com;
4
5 root /var/www/example.com/public;
6 index index.php index.html;
7
8 # Кеширование изображений и шрифтов
9 location ~* \.(jpg|jpeg|png|gif|webp|svg|ico|woff2|woff)$ {
10 expires 1y;
11 add_header Cache-Control "public";
12 access_log off;
13 }
14
15 # Кеширование CSS и JS
16 location ~* \.(css|js)$ {
17 expires 30d;
18 add_header Cache-Control "public";
19 access_log off;
20 }
21
22 location / {
23 try_files $uri $uri/ /index.php?$args;
24 }
25
26 location ~ \.php$ {
27 fastcgi_pass unix:/run/php/php8.4-fpm.sock;
28 include fastcgi_params;
29 }
30}
Cloudflare
Если у тебя shared-хостинг или нет доступа к конфигурации Apache / Nginx, Cloudflare — один из самых удобных способов включить кеширование без вмешательства в сервер.
Cloudflare работает как прокси между пользователем и сервером:
- принимает запросы;
- отдаёт закешированные файлы с ближайшего дата-центра;
- снижает нагрузку на сервер и ускоряет сайт.
Сразу после подключения Cloudflare автоматически кеширует статические файлы:
- изображения;
- CSS;
- JavaScript;
- шрифты.
HTML-страницы по умолчанию Cloudflare не кеширует.
Browser Cache TTL (базовая настройка)
В панели Cloudflare:
Caching → Configuration → Browser Cache TTL
Здесь можно указать, как долго браузер пользователя будет хранить файлы.
Рекомендую установить значение в 1 месяц.
Очистка кеша
После обновления файлов кеш можно сбросить:
Caching → Configuration → Purge Cache → Purge Everything
Важные моменты
Долгий cache требует версионирования файлов
Если для CSS или JavaScript задан большой срок кеширования (max-age на месяцы или год), URL файла должен меняться при каждом обновлении.
Примеры корректного URL: /assets/css/app.css?v=1718032451 или /assets/css/app.8f3a2c1.css.
Без этого браузер будет продолжать использовать старую версию файла, даже если он уже обновлён на сервере.
Browser cache и Page cache
Кеширование через Apache или Nginx:
- не кеширует HTML-страницы;
- влияет только на статические файлы.
Для реального ускорения сайта нужен ещё и page cache (серверный, через плагин или CDN).
htaccess работает только с Apache
Файл .htaccess обрабатывается только Apache.
Если сайт работает на Nginx, любые правила в .htaccess будут полностью игнорироваться.
Shared-хостинг накладывает ограничения
На shared-хостингах:
- доступ к конфигу Nginx часто закрыт;
- правила кеширования могут быть жёстко ограничены;
- не всё можно решить самостоятельно.
В таких случаях самый стабильный вариант — использовать CDN или обратиться в поддержку хостинга.