Для CDN-ресурса можно настроить пользовательский HTTP-заголовок, который будет автоматически добавляться ко всем запросам от CDN к серверу-источнику. На стороне сервера-источника можно проверять наличие и значение этого заголовка, отклоняя любые запросы без него.
Такой подход позволяет защитить сервер-источник от прямого доступа без необходимости использовать список IP-адресов CDN. Сервер остается доступен по сети, однако прямые обращения к нему будут получать ответ 403 Forbidden.
Этот механизм защищает только сервер-источник от обхода CDN. Он не ограничивает доступ пользователей к файлам через домен раздачи. Для ограничения доступа к контенту используйте Secure token.
Настройка HTTP-заголовка в CDN
Чтобы добавить пользовательский заголовок:
-
Откройте нужный ресурс в разделе «CDN».
-
Перейдите во вкладку «Управление».
-
Нажмите кнопку «Настроить» напротив пункта «HTTP-заголовки».
-
Включите опцию «Заголовки запросов».
-
Укажите произвольное имя заголовка и его значение. В качестве значения рекомендуем использовать случайно сгенерированную строку — так ее невозможно будет подобрать стороннему пользователю.
-
Нажмите кнопку «Сохранить» и дождитесь применения настроек.

Пример настройки ограничения доступа
В качестве примера настроим сервер-источник на базе Nginx, который будет отдавать статический файл только при наличии секретного заголовка.
Настройка сервера-источника
Установите Nginx:
sudo apt update
sudo apt install -y nginx
Создайте директорию для статических файлов:
sudo mkdir -p /var/www/origin-static
Создайте html-страницу:
echo 'Привет с сервера-источника' | sudo tee /var/www/origin-static/hello.txt
Создайте файл конфигурации /etc/nginx/conf.d/cdn-origin.conf:
map $http_x_cdn_origin_secret $cdn_origin_secret_ok {
default 0;
"change-me-to-long-random-secret" 1;
}
server {
listen 80;
server_name origin.example.site;
root /var/www/origin-static;
location / {
if ($cdn_origin_secret_ok = 0) {
return 403;
}
try_files $uri =404;
add_header Cache-Control "public, max-age=60";
}
}
Замените значение change-me-to-long-random-secret на случайную строку. Сгенерировать ее можно командой:
openssl rand -base64 48 | tr -dc 'A-Za-z0-9' | head -c 30
echo
Также укажите собственный домен вместо origin.example.site.
В блоке:
map $http_x_cdn_origin_secret $cdn_origin_secret_ok {
default 0;
"change-me-to-long-random-secret" 1;
}
Nginx проверяет значение заголовка X-CDN-Origin-Secret. Если значение совпадает с указанным в конфигурации, запрос будет обработан. В противном случае сервер вернет ошибку 403 Forbidden.
Если включен стандартный сайт Nginx, отключите его:
sudo rm -f /etc/nginx/sites-enabled/default
Проверьте конфигурацию:
sudo nginx -t
Примените изменения:
sudo systemctl reload nginx
Проверка работы сервера-источника
Выполните запрос без заголовка:
curl -i "http://origin.example.site/hello.txt"
В ответ должен быть получен статус:
403 Forbidden
Теперь выполните запрос с корректным заголовком:
curl -i -H "X-CDN-Origin-Secret: сгенерированная_случайная_строка" "http://origin.example.site/hello.txt"
Ожидаемый результат:
200 OK
Настройка сертификата
Установите Certbot:
sudo apt update
sudo apt install -y certbot python3-certbot-nginx
Выпустите сертификат:
sudo certbot --nginx -d origin.example.site
Certbot автоматически добавит SSL-настройки в конфигурацию Nginx и предложит настроить перенаправление с HTTP на HTTPS.
Настройка CDN-ресурса
Создайте CDN-ресурс и в качестве источника укажите домен, настроенный на предыдущем этапе.
После создания ресурса:
-
Откройте его в панели управления.
-
Перейдите во вкладку «Управление».
-
Нажмите кнопку «Настроить» напротив пункта «HTTP-заголовки».
-
Включите опцию «Заголовки запросов».
-
Укажите:
-
имя заголовка —
X-CDN-Origin-Secret; -
значение — ту же случайную строку, которая указана в конфигурации Nginx.
-
Нажмите кнопку «Сохранить» и дождитесь обновления ресурса.
Проверка
Попробуйте обратиться к файлу напрямую на сервере-источнике:
curl -i "https://origin.example.site/hello.txt"
Сервер должен вернуть ошибку 403 Forbidden.
Теперь выполните запрос через CDN-домен:
curl -i "http://1cxiuba12bn.cdn.twcstorage.ru/hello.txt"
В ответ вы получите содержимое файла и статус 200 OK.
Обратите внимание, что заголовок X-CDN-Origin-Secret не передается конечному пользователю. Он используется только для взаимодействия между CDN и сервером-источником.