[Документация Yandex Cloud](../../../../index.md) > [Yandex Object Storage](../../../index.md) > [Пошаговые инструкции](../../index.md) > Хостинг статических сайтов > [Поддержка нескольких доменных имен](index.md) > Консоль управления, CLI и API

# Поддержка нескольких доменных имен с помощью консоли управления, CLI или API

Чтобы создать инфраструктуру для поддержки [нескольких доменных имен](index.md) сайта с помощью консоли управления Yandex Cloud, CLI или API:
1. [Создайте бакеты](#buckets).
1. [Настройте статический сайт для основного домена](#common).
1. [Настройте переадресацию для дополнительного домена](#xtra).
1. [Проверьте работу нескольких доменов](#test).


## Создайте бакеты {#buckets}

Создайте бакеты и назовите их в соответствии с доменными именами, например `example.com` и `example2.com`.

1. Создайте бакет для основного доменного имени `example.com`:

    {% list tabs group=instructions %}

    - Консоль управления {#console}

      1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором хотите создать бакет.
      1. [Перейдите](https://kz.console.yandex.cloud/link/storage) в сервис **Object Storage**.
      1. На панели сверху нажмите **Создать бакет**.
      1. На странице создания бакета:

          1. Введите имя бакета в соответствии с основным доменным именем сайта, например `example.com`.

              {% note info %}

              Имена бакетов должны совпадать с доменными именами. 

              {% endnote %}

          1. Задайте максимальный размер бакета.

          1. Включите `Для всех` — доступ для любых пользователей.

          1. Выберите [класс хранилища](../../../concepts/storage-class.md) по умолчанию — `Стандартное`.

          1. Нажмите **Создать бакет** для завершения операции.

    - Yandex Cloud CLI {#cli}

      Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../../../cli/quickstart.md#install).

      По умолчанию используется каталог, указанный при [создании](../../../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

      1. Посмотрите описание команды CLI для создания бакета:

          ```bash
          yc storage bucket create --help
          ```

      1. Создайте бакет в каталоге по умолчанию:

          ```bash
          yc storage bucket create --name <имя_бакета> \
            --public-read \
            --public-list
          ```

          Где 
          * `--name` — имя бакета в соответствии с основным доменным именем сайта, например `example.com`.

              {% note info %}

              Имена бакетов должны совпадать с доменными именами. 

              {% endnote %}

          * `--public-read` — включить публичный доступ на чтение объектов в бакете.
          * `--public-list` — включить публичный доступ на просмотр списка объектов в бакете.

          Результат:

          ```text
          name: example.com
          folder_id: b1geoelk7fld********
          anonymous_access_flags:
            read: true
            list: true
          default_storage_class: STANDARD
          versioning: VERSIONING_DISABLED
          created_at: "2025-08-08T09:12:45.743187Z"
          resource_id: e3etgi7l43gs********
          ```

    - API {#api}

      Чтобы создать бакет, воспользуйтесь методом REST API [create](../../../api-ref/Bucket/create.md) для ресурса [Bucket](../../../api-ref/Bucket/index.md), вызовом gRPC API [BucketService/Create](../../../api-ref/grpc/Bucket/create.md) или методом S3 API [create](../../../s3/api-ref/bucket/create.md).

    {% endlist %}

1. Создайте бакет для дополнительного доменного имени `example2.com`, повторив шаги выше.

## Настройте статический сайт для основного домена {#common}

Настройте статический сайт для бакета и свяжите его с основным доменным именем `example.com`:

1. Настройте бакет `example.com` в качестве хостинга статического сайта.

    {% list tabs group=instructions %}

    - Консоль управления {#console}

      1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог.
      1. [Перейдите](https://kz.console.yandex.cloud/link/storage) в сервис **Object Storage**.
      1. Выберите бакет, для которого хотите настроить хостинг.
      1. На панели слева выберите ![image](../../../../_assets/console-icons/wrench.svg) **Настройки**.
      1. Выберите вкладку **Веб-сайт**.
      1. В разделе **Хостинг**:
          * В поле **Главная страница** укажите абсолютный путь к файлу в бакете для главной страницы сайта, например `index.html`.
      
            {% note warning %}
            
            [Ключ объекта](../../../concepts/object.md#key) с главной страницей сайта не может содержать символ `/`.
            
            {% endnote %}
      
          * (опционально) В поле **Страница ошибки** укажите абсолютный путь к файлу в бакете, который будет отображаться при ошибках 4xx, например `pages/error404.html`. По умолчанию Object Storage возвращает собственную страницу.
      1. Нажмите кнопку **Сохранить**.

      Проверить хостинг можно, перейдя по ссылке в поле **Ссылка**.

    - Yandex Cloud CLI {#cli}

      1. Посмотрите описание команды CLI для настройки хостинга статического сайта в бакете:
      
          ```bash
          yc storage bucket update --help
          ```
          
      1. Создайте файл с настройками хостинга в формате JSON. Например:
          
          ```json
          {
            "index": "index.html",
            "error": "error404.html"
          }
          ```
      
          Где:
      
          * `index` — абсолютный путь к файлу главной страницы сайта.
      
            {% note warning %}
            
            [Ключ объекта](../../../concepts/object.md#key) с главной страницей сайта не может содержать символ `/`.
            
            {% endnote %}
      
          * `error` — абсолютный путь к файлу, который будет отображаться пользователю при ошибках 4xx.
      
            {% note tip %}
            
            Если вы размещаете в бакете [одностраничное приложение](https://ru.wikipedia.org/wiki/Одностраничное_приложение), укажите в качестве страницы ошибки главную страницу, например `index.html`.
            
            {% endnote %}
      
      1. Выполните следующую команду:
      
          ```bash
          yc storage bucket update --name <имя_бакета> \
            --website-settings-from-file <путь_к_файлу>
          ```
          
          Где:
          * `--name` — имя бакета.
          * `--website-settings-from-file` — путь к файлу с настройками хостинга.
      
          Результат:
      
          ```text
          name: my-bucket
          folder_id: b1gjs8dck8bv********
          default_storage_class: STANDARD
          versioning: VERSIONING_SUSPENDED
          max_size: "10737418240"
          acl: {}
          created_at: "2022-12-14T08:42:16.273717Z"
          ```
      
      Чтобы убедиться, что настройки хостинга появились в описании бакета, выполните команду:
      
      ```bash
      yc storage --name <имя_бакета> bucket get --full
      ```
      
      Результат:
      
      ```text
      website_settings:
        index: index.html
        error: error404.html
        redirect_all_requests: {}
      ```

    - API {#api}

      Чтобы настроить хостинг статического сайта, воспользуйтесь методом REST API [update](../../../api-ref/Bucket/update.md) для ресурса [Bucket](../../../api-ref/Bucket/index.md), вызовом gRPC API [BucketService/Update](../../../api-ref/grpc/Bucket/update.md) или методом S3 API [upload](../../../s3/api-ref/hosting/upload.md).

    {% endlist %}

1. Свяжите доменное имя `example.com` и соответствующий бакет.

    1. Создайте на [DNS-сервере](../../../../glossary/dns.md#dns-server) публичную зону DNS и ресурсную запись, которая связывает ваше доменное имя и бакет:

        {% list tabs group=instructions %}

        - Yandex Cloud DNS {#dns}

          {% note warning %}

          Использование сервиса Cloud DNS тарифицируется, подробнее на странице [Правила тарификации для Cloud DNS](../../../../dns/pricing.md).

          {% endnote %}

          1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог.
          1. [Перейдите](https://kz.console.yandex.cloud/link/storage) в сервис **Object Storage**.
          1. Выберите бакет, для которого хотите использовать собственный домен.
          1. На панели слева выберите ![image](../../../../_assets/console-icons/wrench.svg) **Настройки** и перейдите на вкладку **Веб-сайт**.
          1. В разделе **Хостинг** в блоке **Домены в Cloud DNS** нажмите кнопку **Создать запись**.

              {% note info %}

              В блоке **Домены в Cloud DNS** раздела **Хостинг** отображаются только те домены, которые были созданы непосредственно в этом интерфейсе. Если запись была создана в сервисе [Cloud DNS](../../../../dns/quickstart.md), то в этом блоке она отображаться не будет.

              {% endnote %}

          1. В открывшемся окне нажмите кнопку **Создать зону** и выберите доменную зону, которая соответствует имени бакета, например `example.com`. Нажмите кнопку **Создать**.
          1. Раскройте блок **Дополнительные настройки**.
          1. В поле **TTL (в секундах)** укажите время жизни ресурсной записи или выберите из предложенных.
          1. Нажмите кнопку **Создать**.
          1. Нажмите кнопку **Сохранить**.
          
          Чтобы получить доступ к именам из публичной зоны, делегируйте домен. Для этого в личном кабинете вашего доменного регистратора укажите адреса серверов `ns1.yandexcloud.kz` и `ns2.yandexcloud.kz`.

          Делегирование домена и обновление ресурсных записей могут занять некоторое время.

          Вы также можете [создать зону DNS](../../../../dns/operations/zone-create-public.md) и [ресурсную запись](../../../../dns/operations/resource-record-create.md) средствами Cloud DNS.
          
          {% cut "Пример параметров зоны DNS и ресурсной записи" %}

          Параметры зоны DNS:
          * Зона — `example.com.`.
          * Тип — `публичная`.

          Параметры ресурсной записи:

          | Имя          | Тип   | TTL | Значение                      |
          |--------------|-------|-----|-------------------------------|
          | example.com. | ANAME | 600 | example.com.website.yandexcloud.kz |

          Записи [ANAME](../../../../dns/concepts/resource-record.md#aname) позволяют использовать для хостинга домены второго уровня и, в отличие от [CNAME](../../../../dns/concepts/resource-record.md#cname), не ограничивают использование других типов записей в одной с ними зоне. 

          {% endcut %}

        - Внешний DNS-сервер {#third-party-dns-server}

          Пример параметров зоны DNS:
          * Зона — `example.com.`.
          * Тип — `публичная`.
          
          Пример ресурсной записи [CNAME](../../../../dns/concepts/resource-record.md#cname): 

          ```text
          example.com CNAME example.com.website.yandexcloud.kz
          ```

          Чтобы использовать ресурсную запись CNAME, ваше доменное имя должно быть в домене не ниже третьего уровня — это связано с особенностями обработки CNAME-записей на DNS-хостингах. Подробнее смотрите п. 2.4 [RFC 1912](https://www.ietf.org/rfc/rfc1912.txt).

          Обновление ресурсных записей может занять некоторое время.

        {% endlist %}

        В результате статический сайт будет доступен по адресу `example.com`.

1. [Настройте HTTPS](../certificate.md#cert-manager): привяжите к бакету сертификат из Certificate Manager или загрузите свой.

    {% note info %}

    Вы можете использовать один сертификат для основного и дополнительного домена или несколько сертификатов для каждого домена.

    {% endnote %}

    Переадресация запросов с HTTP на HTTPS включается автоматически после настройки доступа к бакету по HTTPS. Дополнительных настроек для такой переадресации не требуется.

В результате статический сайт будет доступен по адресу `example.com` по протоколу HTTPS.


## Настройте переадресацию для дополнительного домена {#extra}

Для бакета с дополнительным доменным именем `example2.com`:

1. Настройте в бакете `example2.com` переадресацию всех запросов на основной домен `example.com` и **протокол** HTTPS.

    {% list tabs group=instructions %}

    - Консоль управления {#console}

      1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог.
      1. [Перейдите](https://kz.console.yandex.cloud/link/storage) в сервис **Object Storage**.
      1. Выберите бакет, для которого хотите настроить переадресацию всех запросов.
      1. На панели слева выберите ![image](../../../../_assets/console-icons/wrench.svg) **Настройки**.
      1. Выберите вкладку **Веб-сайт**.
      1. В разделе **Переадресация** укажите:
          * **Доменное имя** — доменное имя, на которое будут переадресованы все запросы, например `example.com`.
          * **Протокол** — **HTTPS**.
      1. Нажмите кнопку **Сохранить**.

    - Yandex Cloud CLI {#cli}

      1. Посмотрите описание команды CLI для настройки переадресации всех запросов:

          ```bash
          yc storage bucket update --help
          ```
     
      1. Создайте файл с настройками переадресации в формате JSON. Например:
     
          ```json
          {
            "redirectAllRequests": {
              "protocol": "PROTOCOL_HTTPS",
              "hostname": "example.com"
            }
          }
          ```

          Где:
          * `protocol` — протокол передачи данных.
          * `hostname` — доменное имя хоста, на который будут перенаправляться все запросы к текущему бакету.

      1. Выполните следующую команду:

          ```bash
          yc storage bucket update --name <имя_бакета> \
            --website-settings-from-file <путь_к_файлу>
          ```

          Где:
          * `--name` — имя бакета.
          * `--website-settings-from-file` — путь к файлу с настройками переадресации.

          Результат:

          ```text
          name: example2.com
          folder_id: b1gjs8dck8bv********
          default_storage_class: STANDARD
          versioning: VERSIONING_SUSPENDED
          max_size: "10737418240"
          acl: {}
          created_at: "2022-12-14T08:42:16.273717Z"
          ```

    - API {#api}

      Чтобы настроить переадресацию всех запросов к бакету, воспользуйтесь методом REST API [update](../../../api-ref/Bucket/update.md) для ресурса [Bucket](../../../api-ref/Bucket/index.md), вызовом gRPC API [BucketService/Update](../../../api-ref/grpc/Bucket/update.md) или методом S3 API [upload](../../../s3/api-ref/hosting/upload.md).

    {% endlist %}

1. [Настройте HTTPS](../certificate.md#cert-manager): привяжите к бакету сертификат из Certificate Manager или загрузите свой.

    Переадресация запросов с HTTP на HTTPS включается автоматически после настройки доступа к бакету по HTTPS. Дополнительных настроек для такой переадресации не требуется.

1. [Свяжите](../own-domain.md) доменное имя `example2.com` и соответствующий бакет.


## Проверьте работу нескольких доменов {#test}

Дождитесь выпуска TLS-сертификата и его перехода в статус `Issued`. После этого убедитесь, что переадресация работает: откройте сайт `https://example2.com`, и вы будете переадресованы на `https://example.com`.


#### Полезные ссылки {#see-also}

[Поддержка нескольких доменных имен с помощью Terraform](terraform.md)