CDN
Что делать, если CDN не работает?
После интеграции с CDN контент вашего сайта не загружается или загружается неправильно? Эта инструкция поможет быстро решить часто возникающие проблемы.
Определите причину проблемы: источник или CDN-ресурс
Выберите любой файл, который раздаётся через CDN. Запросите его с источника напрямую и проверьте код ответа.
Например:
-
example.com — домен вашего сайта-источника
-
http или https — зависит от протокола, по которому отвечает источник
-
/image.png — путь до файла, который вы запрашиваете
Запрос будет выглядеть так:
http(s)://example.com/image.png
Если файл загружается корректно и отвечает кодом HTTP 200, значит, проблема не связана с источником. В таком случае проверьте настройки CDN, следуя инструкции ниже. Если файл загружается с ошибками и отвечает кодом HTTP 4xx или 5xx, значит, сложность на стороне источника, а не на стороне CDN.
Проверьте настройки CDN
Проверьте конфигурацию персонального домена
Контент будет раздаваться с вашего источника, а не через CDN, если CNAME-запись персонального домена не настроена. Проверьте её:
1. Перейдите в Настройки ресурса и посмотрите на кнопку Инструкция по настройке. Откройте её, если вы видите уведомление «Осталось Х шагов». Перейдите к следующему разделу этой инструкции, если уведомления нет.
2. Нажмите на кнопку Проверить статус настройки DNS.
Появится такое уведомление, если CNAME-запись не настроена:
Если вы видите уведомление «DNS-запись успешно настроена», значит, CNAME-запись настроена верно — откройте следующий раздел этой инструкции.
3. Откройте Набор инструментов администратора Google, выберите вкладку CNAME и введите персональный домен вашего CDN-ресурса. На скриншоте выше это cdn.yourname.com. Нажмите Enter.
Далее возможны два варианта:
1) В секции TARGET появится значение CNAME-записи из Инструкции по настройке.
Это значит, что CNAME-запись настроена корректно. Проверьте статус настройки DNS снова (повторите шаг №2). В Инструкции по настройке должно появиться уведомление о том, что запись настроена.
Обратите внимание: DNS-записи обновляются в течение 24 часов.
2) В нижней секции появилось сообщение «Record not found!». В этом случае добавьте CNAME-запись по инструкции «Настроить CNAME-записи в DNS».
4. Дождитесь обновления DNS-записи, очистите кеш браузера и попробуйте запросить контент через CDN снова. Если проблема заключалась в некорректных настройках CNAME-записи, сложность с загрузкой контента больше не повторится.
Проверьте опцию Заголовок Host
Ваш источник не сможет обрабатывать запросы от CDN, если значение опции Заголовок Host не будет совпадать с доменом источника. Проверьте, правильно ли настроена опция:
1. Перейдите в Настройки ресурса → HTTP-заголовки → Заголовок Host.
2. Скопируйте значение заголовка Host из опции.
3. Выполните команду в терминале или консоли:
curl -H "Host: example.com" -I http(s)://10.0.0.1/image.png
где:
-
example.com — значение заголовка Host
-
http или https — зависит от протокола, по которому отвечает источник
-
10.0.0.1 — IP-адрес источника
-
/image.png — путь до файла, который вы запрашиваете
4. Если в ответе вы получили код HTTP 2xx, проблема не связана с заголовком Host. В таком случае перейдите к следующему разделу этой инструкции.
Опция Заголовок Host настроена неверно, если вам вернулся ответ с кодом HTTP 4xx или 5xx. Чтобы это исправить:
-
Впишите домен или IP-адрес вашего источника в значение опции Заголовок Host, если с CDN интегрирован только один сайт или приложение. Затем очистите кеш CDN и подождите 15 минут, чтобы новые настройки вступили в силу.
-
Если вы добавили несколько источников в группу источников, каждый из них должен корректно обрабатывать домен или IP-адрес, который указан в опции Заголовок Host. Настройте источники, чтобы они обрабатывали значение заголовка. Затем очистите кеш CDN и подождите 15 минут, чтобы новые настройки вступили в силу.
Проверьте опцию Протокол взаимодействия с источником
CDN ответит ошибкой или перенаправит запрос на источник, если вы выберите неверное значение опции Протокол взаимодействия с источником. Чтобы проверить, верный ли выбран протокол:
1. Определите, какой протокол использует ваш сайт. Для этого откройте сайт в браузере и посмотрите на адресную строку. Если слева от доменного имени стоит иконка замка, значит, ваш сайт работает по протоколу HTTPS.
Так, когда вы скопируете значение адресной строки, получите: https://example.com. Вместо example.com — ваш домен.
Если видите надпись «Не защищено» или Not secure, значит, сайт работает по HTTP. После копирования значения адресной строки, получите: http://example.com. Вместо example.com — ваш домен.
Возможно, ваш источник доступен и по протоколу HTTP, и по протоколу HTTPS. Чтобы это проверить, откройте ваш сайт по обоим протоколам: http://example.com и https://example.com.
2. Перейдите в Настройки ресурса → Общие → Протокол взаимодействия с источником. Вы увидите, какой протокол выбран для CDN-ресурса.
3. Сравните протокол из шага №1 со значением опции из шага №2. Если они совпадают: например, сайт работает по протоколу HTTP, и в значении опции выбран протокол HTTP, значит, проблема не связана с протоколом. Тогда перейдите к следующему разделу этой инструкции.
Если протоколы отличаются, перейдите к следующему шагу этой инструкции.
4. Измените значение опции Протокол взаимодействия с источником в соответствии с инструкцией «Источник. Указать источник контента и протокол взаимодействия с источником». Выберите тип протокола, который использует ваш сайт. Сохраните настройки и очистите кеш CDN.
Проверьте опцию SSL
Если вы активировали опцию SSL, но сертификат для вашего персонального домена не добавился или добавился с ошибкой, контент будет недоступен через CDN, или вы увидите надпись «Не защищено» (Not secure) в браузере.
Проверьте настройки SSL-сертификата. Для этого перейдите в Настройки ресурса → Общие → SSL и убедитесь, что ползунок «Поддержка HTTPS» активен.
Опция предложит две конфигурации: «Выписать бесплатный сертификат Let's Encrypt» и «Добавить или выбрать собственный SSL-сертификат». В обоих случаях дождитесь, когда SSL-сертификат применится к CDN-ресурсу.
Процесс решения проблемы зависит от конфигурации SSL, которую вы выбрали.
Бесплатный сертификат Let's Encrypt
1. Вернитесь к разделу о проверке персонального домена и убедитесь, что для него создана CNAME-запись. Без неё сертификат Let's Encrypt не выпишется. Перейдите к следующему шагу этой инструкции, если CNAME-запись существует.
2. Перейдите в Настройки ресурса → Правила.
3. Убедитесь, что на CDN-ресурсе нет правил, которые бы помешали выписке сертификата. Чтобы выявить их, проверьте поле «Шаблон правила» каждого правила. Убедитесь, что это поле не содержит следующие значения:
-
/*
-
((?!(jpeg|gif|png|pdf|jpg|css|js|woff|woff2|ttf)).)*$
-
/.well-known/acme-challenge/
Первое и второе значения охватывают все запросы, которые приходят на CDN. Третье значение совпадает со значением, которое мы используем для выписки сертификата. Поэтому при наличии любого из приведённых выше значений, сертификат Let's Encrypt не выпишется.
Если вы нашли правило с таким значением, удалите или измените его. В следующий раз, когда Let’s Encrypt попытается выписать сертификат, попытка будет успешной.
В случае если на CDN-ресурсе ещё не добавлены правила, перейдите к следующему разделу этой инструкции.
Собственный SSL-сертификат
1. Выполните команду в терминале или консоли:
curl -I https://cdn.example.com/image.png
где:
-
cdn.example.com — персональный домен
-
/image.png — путь до файла, который вы запрашиваете
Если в ответе вы получили код HTTP 2xx, перейдите к следующему шагу этой инструкции. Если в ответе ошибка
curl: (77) schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325)
значит, используется самоподписанный сертификат. Такие сертификаты не подходят для доставки контента. В этом случае выпишите новый сертификат с помощью Центра Сертификации и добавьте его в соответствии с инструкцией «Добавить SSL-сертификат к ресурсу для передачи контента по HTTPS».
2. Откройте ваш сайт и запросите любой файл, который доставляется через CDN. Нажмите на иконку замка и перейдите к информации о сертификате. Проверьте следующие значения:
-
На какой домен распространяется сертификат
-
Срок действия сертификата
Если вы видите, что срок действия сертификата не истёк, а сертификат выписан для персонального домена вашего ресурса (если указан домен вида *.example.com, значит, вы используете wildcard-сертификат, который распространяется на все поддомены, включая cdn.example.com), перейдите к следующему шагу этой инструкции.
Обновите сертификат, если срок его действия истёк или выпишите другой, если домен распространяется на домен, отличный от персонального домена CDN-ресурса.
3. Перейдите на сайт SSLlabs, введите персональный домен в поле Hostname и нажмите на кнопку Submit.
Проверка займёт несколько минут. Если она не выявит проблем с цепочками сертификата или установит рейтинг «A+», значит, проблема не связана с SSL. В таком случае перейдите к следующему разделу этой инструкции.
Если проверка выявит проблему с цепочками сертификата или установит рейтинг «B», значит цепочка сертификата неполная или добавлена неверно. Перейдите в раздел SSL-сертификаты в личном кабинете. Удалите некорректный сертификат и добавьте его снова в соответствии с инструкцией «Добавить SSL-сертификат к ресурсу для передачи контента по HTTPS».
Проверьте опции кеширования
Контент будет доставляться медленно, а статистика кешированного трафика покажет низкое значение, если опции кеширования настроены неверно.
1. Перейдите на страницу Дашборда и нажмите на Общий трафик.
2. Установите фильтр «Кешированный трафик», выберите CDN-ресурс и временной диапазон. Если процент кешированного трафика менее 60%, значит, на CDN кешируется малая часть контента.
В этом случае проверьте, когда вы создали CDN-ресурс. О проблеме с кешированием можно судить спустя два дня использования CDN, так как за это время прогревается его кеш. На процент кешированного трафика также влияет количество запросов на контент от конечных пользователей. Увеличьте количество запросов, а если это не поможет, перейдите к следующему шагу этой инструкции.
Внимание: если контент не запрашивается, он удалится из кеша CDN через 36 часов независимо от настроек кеширования.
3. Выберите любой файл, который доставляется через CDN, запросите его с помощью браузера, консоли или терминала и найдите HTTP-заголовки Cache и Cache-Control. Если в ответе вы видите одно из значений ниже, значит, есть проблема с настройками кеширования:
-
Cache-Control: max-age=0
-
Cache-Control: private
-
Cache-Control: no-cache
-
Cache: MISS
Перейдите к следующему шагу этой инструкции, если одно из значений выше совпало с вашим ответом. Если совпадений нет — перейдите к шагу №5 этой инструкции.
4. Перейдите в Настройки ресурса → Кеширование → Кеширование на CDN. Настройте опцию в соответствии с инструкцией «Настроить и проверить параметры кеширования на CDN-серверах».
5. Проверьте опции Set-Cookie и Параметры запроса и активируйте их, если они выключены. Так, CDN будет кешировать файлы с разными параметрами запроса и значениями HTTP-заголовка Set-Cookie как один файл, что повысит процент кешированного трафика.
Проверьте опцию Очистка
Как понять, что опция Очистка не сработала:
-
CDN возвращает устаревший файл.
-
Файл в кеше CDN и тот же файл на источнике не совпадают.
Как исправить ошибку:
1. Подождите 15 минут, чтобы кеш очистился на всех CDN-серверах.
2. Выполните приведённые ниже команды в терминале или консоли. Так вы запросите один и тот же файл и с источника, и с CDN:
curl -I cdn.example.com/image.png
curl -H "Host: example.com" -I http(s)://10.0.0.1/image.png
где:
-
cdn.example.com — персональный домен CDN-ресурса
-
/image.png — путь до файла, который вы запрашиваете
-
http или https — зависит от протокола, по которому отвечает источник
-
example.com — значение заголовка Host
-
10.0.0.1 — IP-адрес источника
3. Сравните ответы команд и обратите внимание на значения заголовков:
-
Content-Length — размер объекта в байтах
-
ETag — набор символов, по которому CDN определяет, изменился ли файл
-
X-Cached-Since — время в формате UTC, когда файл был закеширован на CDN
В случае если у двух файлов не совпадают значения заголовков Etag и Content-Length, или время в значении заголовка X-Cached-Since устарело, значит, во время очистки кеша произошла ошибка. Тогда перейдите к следующему шагу этой инструкции.
Если значения совпадают, а время актуальное, очистка кеша была выполнена правильно.
4. Попробуйте повторить очистку кеша в соответствии с инструкцией «Очистка: выборочно или полностью очистить кеш CDN-ресурса». При выборе Очистки по шаблону обратите внимание на шаблон пути. Мы советуем проверять его, используя сервис регулярных выражений. Для этого введите шаблон пути для очистки кеша в строку в верхней части страницы, а в нижней части — URL файла. Если появится надпись no match, в шаблоне пути есть ошибка. Исправьте её и повторите очистку кеша.
Если вы прошли все шаги этой инструкции, но всё ещё наблюдаете проблемы, свяжитесь с нашей техподдержкой в чате или по почте support@edgecenter.ru. Будем рады помочь!