Настройка хостинга статического сайта в бакете Yandex Object Storage с доступом через Yandex Cloud CDN
Важно
Часть ресурсов, необходимых для прохождения практического руководства, доступны только в регионе Россия.
Чтобы настроить хостинг статического сайта в бакете с доступом через CDN с помощью консоли управления Yandex Cloud, CLI или API:
- Подготовьте облако к работе.
- Добавьте сертификат в Certificate Manager.
- Создайте бакет в Object Storage и загрузите файлы сайта.
- Настройте хостинг статического сайта.
- Создайте CDN-ресурс.
- Настройте DNS для CDN-ресурса.
- Проверьте работу CDN.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры для сайта в бакете с доступом через CDN входят:
- плата за исходящий трафик с CDN-серверов (см. тарифы Cloud CDN);
- плата за хранение данных в Object Storage, операции с ними и исходящий трафик (см. тарифы Object Storage);
- плата за публичные DNS-запросы и DNS-зоны, если вы используете Yandex Cloud DNS (см. тарифы Cloud DNS).
Добавьте сертификат в Certificate Manager
Поддерживаются сертификаты из Yandex Certificate Manager. Вы можете выпустить новый сертификат Let's Encrypt® или загрузить собственный.
Сертификат должен находиться в том же каталоге, в котором расположен ваш CDN-ресурс.
Для сертификата Let's Encrypt® пройдите проверку прав на домен, который указан в сертификате.
Создайте бакет в Object Storage и загрузите файлы сайта
- В консоли управления
выберите сервис Object Storage. - Справа сверху нажмите кнопку Создать бакет.
- В поле Имя укажите имя бакета, например
example.com. - Нажмите кнопку Создать бакет.
-
На локальном компьютере создайте файл главной страницы сайта —
index.html.Пример файла index.html
<!DOCTYPE html> <html> <head> <title>My site</title> </head> <body> <p>The site is working</p> </body> </html> - На странице созданного ранее бакета нажмите кнопку
Загрузить и выберите файлindex.html.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Создайте бакет в каталоге по умолчанию:
yc storage bucket create --name <имя_бакета> \ --public-read \ --public-listГде:
--name— имя бакета, напримерexample.com. Обязательный параметр. Подробнее см. Правила именования бакетов.--public-read— включить публичный доступ на чтение объектов в бакете.--public-list— включить публичный доступ на просмотр списка объектов в бакете.
Результат:
name: example.com folder_id: b1geoelk7fld******** anonymous_access_flags: read: true list: true default_storage_class: STANDARD versioning: VERSIONING_DISABLED created_at: "2025-10-26T17:38:54.635027Z" resource_id: e3ef9cmb253k******** -
На локальном компьютере создайте файл главной страницы сайта —
index.html.Пример файла index.html
<!DOCTYPE html> <html> <head> <title>My site</title> </head> <body> <p>The site is working</p> </body> </html> -
Загрузите файл главной страницы в бакет:
yc storage s3api put-object \ --body <путь_к_локальному_файлу> \ --bucket <имя_бакета> \ --key <путь_к_объекту>Где:
--body— путь к файлу, который нужно загрузить в бакет, напримерindex.html.--bucket— имя вашего бакета, напримерexample.com.--key— ключ, по которому объект будет храниться в бакете, напримерindex.html.
Результат:
etag: '"b810d087812333c7dd9cfa80********"' request_id: 8e8714b8********
-
Чтобы создать бакет, воспользуйтесь методом REST API create для ресурса Bucket, вызовом gRPC API BucketService/Create или методом S3 API create.
-
На локальном компьютере создайте файл главной страницы сайта —
index.html.Пример файла index.html
<!DOCTYPE html> <html> <head> <title>My site</title> </head> <body> <p>The site is working</p> </body> </html> -
Чтобы загрузить главную страницу сайта, воспользуйтесь методом S3 API upload.
Настройте хостинг статического сайта
- В консоли управления
в списке сервисов выберите Object Storage и перейдите в бакет, для которого хотите настроить хостинг. - На панели слева выберите
Настройки. - Перейдите на вкладку Основные.
- В полях Чтение объектов и Чтение списка объектов выберите
Для всех. - Нажмите Сохранить.
- Выберите вкладку Веб-сайт.
- В разделе Хостинг в поле Главная страница укажите абсолютный путь к файлу в бакете для главной страницы сайта, например
index.html. - Нажмите кнопку Сохранить.
Проверить хостинг можно, перейдя по ссылке в поле Ссылка.
-
Задайте параметры хостинга для бакета:
yc storage bucket update --name <имя_бакета> \ --website-settings '{"index":"index.html"}'Где
--name— имя бакета.Результат:
name: example.com folder_id: b1geoelk7fld******** default_storage_class: STANDARD versioning: VERSIONING_DISABLED acl: {} created_at: "2025-10-26T17:38:54.635027Z" website_settings: index: index.html redirect_all_requests: {} resource_id: e3ef9cmb253k********
Чтобы настроить хостинг статического сайта, воспользуйтесь методом REST API update для ресурса Bucket, вызовом gRPC API BucketService/Update или методом S3 API upload.
Создайте CDN-ресурс
- В консоли управления
выберите Cloud CDN. - Нажмите кнопку Создать ресурс.
- Задайте основные настройки CDN-ресурса:
-
В блоке Контент:
-
Включите Доступ к контенту.
-
В поле Запрос контента выберите
Из одного источника. -
В поле Тип источника выберите
Бакет. -
В поле Бакет выберите нужный бакет из списка.
-
Включите Использовать сайт бакета.
-
В поле Протокол для источников выберите
HTTP. -
В поле Доменное имя укажите доменное имя, например
cdn.yandexcloud.example.Внимание
Доменное имя
cdn.yandexcloud.exampleстанет основным, и его будет невозможно изменить после создания CDN-ресурса.
-
-
В блоке Дополнительно:
- В поле Переадресация клиентов выберите
С HTTP на HTTPS. - В поле Тип сертификата укажите
Сертификат из Certificate Managerи выберите сертификат для доменного имениcdn.yandexcloud.example. - В поле Заголовок Host выберите
Свое значениеи в Значение заголовка укажите доменное имя источника в формате:<имя_бакета_с_файлами>.website.yandexcloud.kz, чтобы бакет-источник корректно отвечал на запросы CDN-серверов.
- В поле Переадресация клиентов выберите
-
- Нажмите Продолжить.
- В разделах Кеширование, HTTP-заголовки и методы и Дополнительно оставьте настройки по умолчанию и нажмите Создать и продолжить.
-
Создайте группу источников:
yc cdn origin-group create \ --name <имя_группы_источников> \ --origin source=<имя_бакета_с_файлами>.website.yandexcloud.kz,enabled=trueГде:
--name— имя группы источников.--origin source— доменное имя источника в формате:<имя_бакета_с_файлами>.website.yandexcloud.kz, напримерexample.com.website.yandexcloud.kz.
Результат:
folder_id: b1geoelk7fld******** name: mys3-origin use_next: true origins: - id: "27904" origin_group_id: "42742158888********" source: example.com.website.yandexcloud.kz enabled: true provider_type: ourcdn provider_type: ourcdn -
Создайте ресурс CDN:
yc cdn resource create \ --cname <доменное_имя_cdn> \ --origin-group-id <идентификатор_группы_источников> \ --origin-protocol http \ --cert-manager-ssl-cert-id <идентификатор_TLS_сертифкатоа> \ --host-header <имя_бакета_с_файлами>.website.yandexcloud.kzГде:
--cname— доменное имя для CDN-ресурса, например:cdn.example.com.--origin-group-id— идентификатор группы источников для CDN, созданной на предыдущем шаге.--origin-protocol— протокол, который будет использоваться для взаимодействия CDN-ресурса с источником, укажитеhttp.--cert-manager-ssl-cert-id— идентификатор TLS-сертификата, сохраненный ранее при его создании.--host-header— значение заголовка Host. Чтобы бакет-источник корректно отвечал на запросы CDN-серверов, укажите доменное имя источника в формате:<имя_бакета_с_файлами>.website.yandexcloud.kz, напримерexample.com.website.yandexcloud.kz.
Результат
id: bc8r4l7awapj******** folder_id: b1geoelk7fld******** cname: cdn.example.com created_at: "2025-10-26T17:45:08.171948Z" updated_at: "2025-10-26T17:45:08.171948Z" active: true options: edge_cache_settings: enabled: true default_value: "86400" browser_cache_settings: {} query_params_options: ignore_query_string: enabled: true value: true slice: {} host_options: host: enabled: true value: example.com.website.yandexcloud.kz static_headers: enabled: true stale: {} allowed_http_methods: enabled: true value: - GET - HEAD - OPTIONS proxy_cache_methods_set: enabled: true disable_proxy_force_ranges: enabled: true value: true static_request_headers: enabled: true custom_server_name: {} ignore_cookie: enabled: true value: true secure_key: type: DISABLE_IP_SIGNING origin_group_id: "42742158888********" origin_group_name: mys3-origin origin_protocol: HTTP ssl_certificate: type: CM status: READY data: cm: id: fpq4nl8g1c4h******** provider_type: ourcdn provider_cname: b5384481********.a.yccdn.cloud.yandex.net
Чтобы создать ресурс CDN, воспользуйтесь методом REST API create для ресурса Resource или вызовом gRPC API ResourceService/Create.
Важно
После создания CDN-ресурса может пройти до 15 минут, прежде чем ресурс фактически заработает.
Перед тем как приступать к следующим шагам, убедитесь, что вновь созданный CDN-ресурс полностью работоспособен.
Настройте DNS для CDN-ресурса
Доменное имя cdn.yandexcloud.example должно быть связано с CDN-ресурсом с помощью записей DNS.
Чтобы настроить DNS для CDN-ресурса:
-
Получите доменное имя провайдера Cloud CDN:
Консоль управления- В консоли управления
выберите Cloud CDN. - В списке CDN-ресурсов выберите ресурс с основным доменным именем
cdn.yandexcloud.example. - Из блока Настройки DNS внизу страницы скопируйте доменное имя вида
328938ed********.a.yccdn.cloud.yandex.netилиcl-msa87*****.edgecdn.ruв зависимости от используемого провайдера CDN.
- В консоли управления
-
На сайте компании, которая предоставляет вам услуги DNS-хостинга, перейдите в настройки DNS.
-
Создайте или измените CNAME-запись для
cdn.yandexcloud.exampleтак, чтобы она указывала на скопированное доменное имя:cdn CNAME 328938ed********.a.yccdn.cloud.yandex.netПримечание
Не используйте ресурсную запись ANAME с доменными именами для раздачи контента, поскольку в таком случае конечный пользователь получит ответ от CDN-сервера, не связанного с геолокацией пользователя. Ответ всегда будет одинаков для всех пользователей.
Если вы пользуетесь Cloud DNS, настройте запись по следующей инструкции:
Инструкция по настройке DNS-записей для Cloud DNS
Консоль управления-
В консоли управления
выберите сервис Cloud DNS. -
Если у вас нет публичной зоны DNS, создайте ее:
- Нажмите кнопку Создать зону.
- В поле Зона укажите доменное имя сайта с точкой в конце:
yandexcloud.example.. - В поле Тип выберите
Публичная. - В поле Имя укажите
example-dns-zone. - Нажмите кнопку Создать.
-
Создайте в зоне CNAME-запись для
cdn.yandexcloud.example:- Выберите зону
example-dns-zone. - Нажмите кнопку Создать запись.
- В поле Имя укажите
cdn. - В поле Тип укажите
CNAME. - В поле Значение вставьте скопированное значение вида
328938ed********.a.yccdn.cloud.yandex.net.илиcl-msa87*****.edgecdn.ru.(в зависимости от используемого провайдера CDN) с точкой на конце. - Нажмите кнопку Создать.
- Выберите зону
-
Проверьте работу CDN
Дождитесь обновления DNS-записей — на это может потребоваться несколько часов.
Проверьте доступность сайта: откройте его по новому URL cdn.example.com. Должно произойти перенаправление на страницу https://cdn.example.com, где уже подключен TLS-сертификат из Certificate Manager и источником для раздачи является Cloud CDN.
Как удалить созданные ресурсы
Чтобы остановить работу инфраструктуры и перестать платить за созданные ресурсы:
- Если вы создавали зону в Cloud DNS, то удалите зону DNS
example-dns-zone. - Удалите CDN-ресурс с основным доменным именем
cdn.yandexcloud.example. - Удалите все объекты из бакета.
- Удалите бакет.