MAATRIX / Блог / Настройка CDN перед сервером

Настройка CDN перед сервером

Настройка CDN перед сервером

MAATRIX

Сайт медленно грузится у посетителей из других регионов, а сервер захлёбывается на пиках трафика. CDN перед сервером решает обе задачи: раздаёт статику с ближайшей к пользователю точки и снимает с вашего VPS основную нагрузку по отдаче файлов. Ниже разберём, как правильно поставить CDN, настроить кеширование и не сломать работу сайта — с понятными шагами и типовыми граблями из практики эксплуатации сервера.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что делает CDN и когда он нужен

CDN (сеть доставки контента) — это распределённые по миру серверы, которые кешируют вашу статику и отдают её посетителям с ближайшей точки. Вместо того чтобы каждый пользователь тянул картинки и скрипты через полмира с вашего единственного сервера, он получает их с узла в своём регионе. Результат — быстрее загрузка для географически разбросанной аудитории и меньше нагрузки на ваш VPS, который теперь отдаёт лишь динамику, а тяжёлую статику берёт на себя CDN.

CDN особенно оправдан в трёх случаях. Первый — аудитория распределена по разным странам, и пинг до вашего сервера у части посетителей большой. Второй — на сайте много статики: изображения, видео, стили, скрипты, файлы для скачивания. Третий — случаются наплывы трафика, которые ваш сервер в одиночку не тянет: CDN поглощает основную волну запросов к статике. Если же сайт маленький, аудитория локальная и целиком в одном регионе с сервером, выгода от CDN будет скромной — тут честнее сначала оптимизировать сам сервер.

Как CDN встаёт перед сервером

Схема работы простая. Вы направляете домен на CDN, а CDN знает адрес вашего сервера (его называют origin — источник). Когда приходит запрос, CDN сначала смотрит в свой кеш: если файл там есть, он отдаёт его сразу, не беспокоя ваш сервер. Если файла в кеше нет, CDN идёт за ним на origin, отдаёт посетителю и запоминает на будущее. Так первый запрос идёт до вашего сервера, а все последующие обслуживаются кешем CDN.

Технически подключение обычно сводится к смене DNS: вместо прямой A-записи на IP сервера вы прописываете записи, которые ведут на CDN, а в панели CDN указываете origin — адрес вашего VPS. С этого момента весь трафик идёт через сеть доставки. Важно, чтобы origin оставался доступен для CDN, но при этом был закрыт от прямых обращений в обход сети — иначе защита и кеширование теряют смысл.

Стоит заранее понять, как CDN влияет на определение IP посетителей на вашей стороне. После подключения сети доставки к серверу приходят запросы не от реальных пользователей, а от узлов CDN, и в логах вместо адресов посетителей вы увидите адреса сети. Чтобы не потерять реальные IP — а они нужны и для аналитики, и для блокировок, и для защиты от злоупотреблений, — настройте веб-сервер на чтение адреса из заголовка, который передаёт CDN (обычно это X-Forwarded-For или специальный заголовок провайдера). Без этой настройки все ваши посетители будут выглядеть как несколько адресов CDN, и любые правила, завязанные на IP, начнут работать неправильно. Это одна из самых частых ошибок при первом подключении сети доставки, и лучше учесть её сразу, а не удивляться потом сломанной статистике.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS

Настройка кеширования

Главное в CDN — правильно настроить, что и как долго кешировать. Ошибка здесь либо оставляет сайт медленным, либо показывает посетителям устаревший контент. Разделите ресурсы на статику и динамику. Статику — картинки, стили, скрипты, шрифты — можно и нужно кешировать надолго, задав заголовки на стороне вашего сервера:

location ~* \.(jpg|jpeg|png|gif|css|js|woff2|svg)$ {
    expires 30d;
    add_header Cache-Control "public, max-age=2592000";
}

Эти заголовки говорят CDN и браузеру хранить файлы месяц. Динамику — HTML-страницы личного кабинета, корзину, ответы API — кешировать нельзя или можно очень осторожно, иначе один пользователь увидит данные другого. Для таких ответов отдавайте заголовок Cache-Control: no-store или private, чтобы CDN их не кешировал. Правильное разделение статики и динамики — фундамент, без которого CDN приносит больше проблем, чем пользы.

Не забудьте про инвалидацию кеша

Типовая грабля: вы обновили файл на сервере, а посетители видят старую версию, потому что CDN отдаёт закешированную копию. Решается это двумя приёмами. Первый и самый надёжный — версионирование имён файлов: при каждом изменении меняйте имя или добавляйте хеш, например style.a1b2c3.css. Тогда новая версия — это новый URL, и кеш не мешает. Второй — ручной или автоматический сброс кеша (purge) в панели CDN после деплоя, когда нужно немедленно раздать свежую версию.

Особенно внимательно отнеситесь к HTML-страницам, если вы их кешируете: именно они меняются чаще всего и именно на них обычно жалуются, что сайт показывает старое. Разумная стратегия — долго кешировать неизменную статику с версионированием, а изменчивый контент либо не кешировать, либо держать в кеше короткое время с быстрым сбросом при обновлении.

HTTPS и защита origin

Настройте HTTPS на всём пути: и между посетителем и CDN, и между CDN и вашим сервером. Большинство CDN дают бесплатный сертификат для внешней части, а на origin оставьте свой сертификат, чтобы соединение CDN с сервером тоже шло по шифрованному каналу. Не оставляйте origin работать по открытому HTTP — это дыра, через которую трафик можно перехватить.

Отдельно закройте origin от прямого доступа в обход CDN. Если ваш сервер отвечает всем подряд по своему IP, атакующий может обойти CDN и бить напрямую, а заодно кеширование не сработает. Настройте фаервол так, чтобы сервер принимал HTTP-трафик только с адресов CDN, а порт SSH оставьте под своим доступом:

ufw allow from АДРЕС_CDN to any port 443 proto tcp
ufw allow 22/tcp
ufw enable

Списки адресов CDN обычно публикуются провайдером сети — добавьте их диапазоны, чтобы сервер общался только со своей сетью доставки.

Что остаётся на вашем сервере

CDN разгружает статику, но динамику, базу данных и логику по-прежнему обслуживает ваш VPS. Поэтому не стоит думать, что CDN решает все проблемы производительности. Если тормозит генерация страниц, тяжёлые запросы к базе или не хватает памяти, сеть доставки тут не поможет — она лишь ускоряет отдачу уже готовых файлов. Грамотная эксплуатация сервера с CDN — это связка: сеть доставки берёт на себя статику и наплывы, а сам сервер остаётся быстрым и достаточно мощным для динамической части. Если origin стабильно упирается в ресурсы даже с подключённым CDN, значит бэкенду нужен тариф посерьёзнее — нарастить его на VPS у MAATRIX можно без переезда, с оплатой из России картой или криптой.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

CDN ускорит сайт, если аудитория в одном городе?

Выгода будет скромной: основной эффект CDN — близость точки к посетителю. Для локальной аудитории сначала оптимизируйте сам сервер, кеш и статику.

Почему после обновления виден старый файл?

CDN отдаёт закешированную копию. Решается версионированием имён файлов или ручным сбросом кеша (purge) в панели после деплоя.

Нужно ли закрывать сервер от прямого доступа?

Да, иначе трафик можно пустить в обход CDN. Настройте фаервол, чтобы веб-порты принимали запросы только с адресов сети доставки.

CDN заменяет мощный сервер?

Нет: он разгружает только статику. Динамику, базу и логику обслуживает ваш VPS, и при нехватке его ресурсов CDN не спасёт.

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.