Скорость загрузки сайта критический фактор для удержания пользователей и SEO. 53% мобильных пользователей покидают страницу, если она загружается дольше 3 секунд. CDN (Content Delivery Network) это мощный инструмент для ускорения доставки контента, но его эффективность напрямую зависит от правильной настройки кэширования.
В этой статье я поделюсь своим опытом настройки TTL, политик кэширования и другими техниками, которые помогли моим клиентам сократить время загрузки страниц на 40–70%. Вы найдете примеры кода, сравнение популярных CDN на русскоязычном рынке и готовые рекомендации.
Основы кэширования в CDN
Кэширование в CDN работает по простому принципу: контент сохраняется на серверах, расположенных ближе к пользователям. При повторном запросе данные отдаются из кэша, а не с исходного сервера. Ключевые понятия:
- TTL (Time to Live) — время жизни кэша.
- Cache-Control — HTTP-заголовок для управления кэшированием.
- Инвалидация кэша — принудительное обновление данных.
Настройка TTL: как не промахнуться с временем жизни
TTL определяет, как долго CDN будет хранить копию вашего контента. Неправильный TTL это либо частые запросы к серверу, либо устаревшие данные у пользователей.
Рекомендации по TTL:
- Статика (CSS, JS, изображения): TTL = 1 год.
- Динамический контент (HTML, API): TTL = 1–10 минут.
- Часто обновляемые данные (новости): TTL = 1–5 минут.
Пример настройки TTL в Cloudflare через Page Rules:
- Перейдите в раздел Rules → Page Rules.
- Создайте правило для URL (например,
*.cssили/news/*). - Установите настройку Cache Level → Cache Everything и Edge Cache TTL → 1 month.
Код для установки TTL через Nginx:
location ~* \.(js|css|png|jpg)$ { expires 365d; add_header Cache-Control "public, max-age=31536000"; }
Политики кэширования: Cache-Control и не только
HTTP-заголовок Cache-Control позволяет гибко управлять кэшированием как на стороне CDN, так и в браузере.
Основные директивы:
public— контент можно кэшировать публично.private— кэшируется только в браузере.no-cache— требуется проверка свежести данных.max-age=3600— время жизни кэша в секундах.
Пример для Apache (.htaccess):
<FilesMatch "\.(html|php)$">
Header set Cache-Control "max-age=600, public, must-revalidate"
</FilesMatch>
Пример для динамического контента в Node.js:
app.use((req, res, next) => { res.setHeader('Cache-Control', 'public, max-age=300'); next(); });
Дополнительные техники для максимальной эффективности
Сжатие данных
Активируйте Gzip или Brotli на сервере и в CDN. Например, в Nginx:
gzip on; gzip_types text/plain text/css application/json application/javascript;
Инвалидация кэша
Используйте версионирование файлов:
<script src="/script.js?v=1.2.3"></script>
Edge Side Includes (ESI)
Разбивайте страницы на фрагменты. Пример для Varnish:
<esi:include src="/header.html" />
Сравнение CDN-провайдеров
| Параметр | Cloudflare | Яндекс CDN | G-Core Labs |
|---|---|---|---|
| Минимальный TTL | 1 секунда | 10 минут | 1 минута |
| Поддержка Brotli | Да | Нет | Да |
| Стоимость (за 100 ГБ) | $0,15 | $0,20 | $0,18 |
| Инвалидация через API | Да | Да | Да |
- Cloudflare — идеален для стартапов (есть бесплатный тариф).
- Яндекс CDN — лучше для аудитории в СНГ.
- G-Core Labs — низкая задержка в Восточной Европе.
Рекомендации для веб-разработчиков
- Всегда настраивайте
Cache-Controlна сервере. - Используйте длинный TTL для статики + версионирование.
- Тестируйте настройки через инструменты вроде WebPageTest или GTmetrix.
- Мониторьте кэш-хит (Cache Hit Ratio) в панели CDN.
Правильное управление кэшированием в CDN это баланс между актуальностью данных и скоростью. Начните с настройки TTL и Cache-Control, затем экспериментируйте с продвинутыми техниками Даже идеальный кэш не спасет, если хостинг или CMS тормозят.
Если есть вопросы, пишите в комментариях ниже.
Поддержка автора осуществляется с помощью специальной формы ниже, предоставленной сервисом «ЮMoney». Все платёжные операции выполняются на защищённой странице сервиса, что обеспечивает их корректность и полную безопасность.


