---
title: "Ограничение доступа к серверу-источнику в сервисе CDN"
description: "Ограничение прямого доступа к серверу-источнику в сервисе CDN. Документация и инструкции по использованию и настройке облачных сервисов Timeweb Cloud."
---

# Ограничение прямого доступа к серверу-источнику

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

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

Такой подход позволяет защитить сервер-источник от прямого доступа без необходимости использовать список IP-адресов CDN. Сервер остается доступен по сети, однако прямые обращения к нему будут получать ответ `403 Forbidden`.

> [!NOTE]
> Этот механизм защищает только сервер-источник от обхода CDN. Он не ограничивает доступ пользователей к файлам через домен раздачи. Для ограничения доступа к контенту [используйте Secure token](https://timeweb.cloud/docs/cdn/settings/security#secure-token).

## Настройка HTTP-заголовка в CDN

Чтобы добавить пользовательский заголовок:

1.  Откройте нужный ресурс в разделе «Сети» → «CDN».
    
2.  Перейдите во вкладку «Управление».
    
3.  Нажмите кнопку «Настроить» напротив пункта «HTTP-заголовки».
    
4.  Включите опцию «Заголовки запросов».
    
5.  Укажите произвольное имя заголовка и его значение. В качестве значения рекомендуем использовать случайно сгенерированную строку — так ее невозможно будет подобрать стороннему пользователю.
    
6.  Нажмите кнопку «Сохранить» и дождитесь применения настроек.
    

![Настройка HTTP-заголовка для CDN](https://content.timeweb.com/assets/1be3f1d4-eeb2-4346-a93e-4f889c2b1186.png?width=2806&height=1612)

## Пример настройки ограничения доступа

В качестве примера настроим сервер-источник на базе Nginx, который будет отдавать статический файл только при наличии секретного заголовка.

### Настройка сервера-источника

Установите Nginx:

```bash
sudo apt update
sudo apt install -y nginx
```

Создайте директорию для статических файлов:

```bash
sudo mkdir -p /var/www/origin-static
```

Создайте html-страницу:

```bash
echo 'Привет с сервера-источника' | sudo tee /var/www/origin-static/hello.txt
```

Создайте файл конфигурации `/etc/nginx/conf.d/cdn-origin.conf`:

```bash
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` на случайную строку. Сгенерировать ее можно командой:

```bash
openssl rand -base64 48 | tr -dc 'A-Za-z0-9' | head -c 30
echo
```

Также укажите собственный домен вместо `origin.example.site`.

В блоке:

```bash
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, отключите его:

```bash
sudo rm -f /etc/nginx/sites-enabled/default
```

Проверьте конфигурацию:

```bash
sudo nginx -t
```

Примените изменения:

```bash
sudo systemctl reload nginx
```

### Проверка работы сервера-источника

Выполните запрос без заголовка:

```bash
curl -i "http://origin.example.site/hello.txt"
```

В ответ должен быть получен статус:

```shell
403 Forbidden
```

Теперь выполните запрос с корректным заголовком:

```shell
curl -i -H "X-CDN-Origin-Secret: сгенерированная_случайная_строка" "http://origin.example.site/hello.txt"
```

Ожидаемый результат:

```shell
200 OK
```

### Настройка сертификата

Установите Certbot:

```bash
sudo apt update
sudo apt install -y certbot python3-certbot-nginx
```

Выпустите сертификат:

```bash
sudo certbot --nginx -d origin.example.site
```

Certbot автоматически добавит SSL-настройки в конфигурацию Nginx и предложит настроить перенаправление с HTTP на HTTPS.

## Настройка CDN-ресурса

[Создайте CDN-ресурс](https://timeweb.cloud/docs/cdn/create) и в качестве источника укажите домен, настроенный на предыдущем этапе.

После создания ресурса:

1.  Откройте его в панели управления.
    
2.  Перейдите во вкладку «Управление».
    
3.  Нажмите кнопку «Настроить» напротив пункта «HTTP-заголовки».
    
4.  Включите опцию «Заголовки запросов».
    
5.  Укажите:
    

-   имя заголовка — `X-CDN-Origin-Secret`;
    
-   значение — ту же случайную строку, которая указана в конфигурации Nginx.
    

7.  Нажмите кнопку «Сохранить» и дождитесь обновления ресурса.
    

## Проверка

Попробуйте обратиться к файлу напрямую на сервере-источнике:

```bash
curl -i "https://origin.example.site/hello.txt"
```

Сервер должен вернуть ошибку `403 Forbidden`.

Теперь выполните запрос через CDN-домен:

```bash
curl -i "http://1cxiuba12bn.cdn.twcstorage.ru/hello.txt"
```

В ответ вы получите содержимое файла и статус `200 OK`.

Обратите внимание, что заголовок `X-CDN-Origin-Secret` не передается конечному пользователю. Он используется только для взаимодействия между CDN и сервером-источником.
