[Документация Yandex Cloud](../../../index.md) > [Yandex Object Storage](../../index.md) > [Пошаговые инструкции](../index.md) > Хостинг статических сайтов > Настройка хостинга

# Настройка хостинга


{% note info %}

В [регионе Казахстан](../../../overview/concepts/region.md) доступна только [зона доступности](../../../overview/concepts/geo-scope.md) `kz1-a`.

{% endnote %}


Вы можете разместить свой статический сайт в Object Storage. Статический сайт строится на клиентских технологиях, таких как HTML, CSS и JavaScript. Он не может содержать каких-либо скриптов, требующих запуска на стороне веб-сервера. 

Страницы статического сайта — это [объекты](../../concepts/object.md) в [бакете](../../concepts/bucket.md), [ключи](../../concepts/object.md#key) объектов соответствуют пути к странице на сайте, а полный URL страницы имеет вид `http(s)://website.yandexcloud.kz/<имя_бакета>/<ключ_объекта>`. {#static-site-information}

В бакетах Object Storage поддерживаются:

* [Хостинг статического сайта](#hosting).
* [Переадресация всех запросов](#redirects).
* [Условная переадресация запросов](#redirects-on-conditions).

{% note warning %}

Хостинг статического сайта не поддерживается в бакетах со следующими параметрами:

* Включено [шифрование](../../concepts/encryption.md) бакета. [Отключите](../buckets/encrypt.md#del) шифрование, [удалите](../objects/delete-all.md) объекты из бакета и [загрузите](../objects/upload.md) их заново.
* Отсутствует [публичный доступ](../../security/overview.md#anonymous) к объектам и их списку. [Откройте](../buckets/bucket-availability.md#open-public-access) публичный доступ.
* Настроены [политики доступа](../../concepts/policy.md), ограничивающие доступ к объектам и их списку анонимным пользователям. [Измените](../buckets/policy.md#apply-policy) политику доступа.
* Включен доступ только из [сервисных подключений VPC](../../security/overview.md#pe-vpc). [Восстановите](../buckets/access-via-vpc.md#disable) доступ к бакету из публичной сети.

Подробнее на странице [Обзор способов управления доступом в Object Storage](../../security/overview.md).

{% endnote %}

## Хостинг статического сайта {#hosting}

{% note info %}

Опции хостинга статического сайта и переадресации всех запросов — взаимоисключающие.

{% endnote %}

{% list tabs group=instructions %}

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

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

- Terraform {#tf}

  {% note info %}
  
  Если вы работаете с Object Storage через Terraform от имени [сервисного аккаунта](../../../iam/concepts/users/service-accounts.md), [назначьте](../../../iam/operations/sa/assign-role-for-sa.md) сервисному аккаунту нужную [роль](../../security/index.md#roles-list), например `storage.admin`, на каталог, в котором будут создаваться ресурсы.
  
  {% endnote %}

  Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
  
  
  Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../../terraform/authentication.md) соответствующим способом.

  Перед началом работы, получите [статические ключи доступа](../../../iam/operations/authentication/manage-access-keys.md#create-access-key) — секретный ключ и идентификатор ключа, используемые для аутентификации в Object Storage.

  {% note info %}
  
  Кроме статических ключей доступа для аутентификации в Object Storage можно использовать IAM-токен. Подробнее смотрите в разделе [Создание бакета](../buckets/create.md) и в [документации провайдера](../../../terraform/resources/storage_object.md). 
  
  {% endnote %}

  
  {% note warning %}
  
  Для корректной работы Terraform в [регионе Казахстан](../../../overview/concepts/region.md) укажите в конфигурационном файле Terraform в блоке `provider` эндпоинты API Yandex Cloud и Object Storage: 
  
  ```hcl
  provider "yandex" {
    zone             = "kz1-a"
    endpoint         = "api.yandexcloud.kz:443"
    storage_endpoint = "https://storage.yandexcloud.kz"
  }
  ```
  
  Подробнее о настройках провайдера в разделе [Настройте провайдер](../../../tutorials/infrastructure-management/terraform-quickstart.md#configure-provider).
  
  {% endnote %}


  1. Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:

     ```hcl
     provider "yandex" {
       cloud_id  = "<идентификатор_облака>"
       folder_id = "<идентификатор_каталога>"
       zone      = "kz1-a"
     }

     resource "yandex_iam_service_account" "sa" {
       name = "<имя_сервисного_аккаунта>"
     }

     // Назначение роли сервисному аккаунту
     resource "yandex_resourcemanager_folder_iam_member" "sa-admin" {
       folder_id = "<идентификатор_каталога>"
       role      = "storage.admin"
       member    = "serviceAccount:${yandex_iam_service_account.sa.id}"
     }

     // Создание статического ключа доступа
     resource "yandex_iam_service_account_static_access_key" "sa-static-key" {
       service_account_id = yandex_iam_service_account.sa.id
       description        = "static access key for object storage"
     }

     resource "yandex_storage_bucket" "test" {
       access_key = yandex_iam_service_account_static_access_key.sa-static-key.access_key
       secret_key = yandex_iam_service_account_static_access_key.sa-static-key.secret_key
       bucket     = "<имя_бакета>"
       acl        = "public-read"
     
       website {
         index_document = "index.html"
         error_document = "error.html"
       }
     
     }
     ```

     Где:

     * `access_key` — идентификатор статического ключа доступа.
     * `secret_key` — значение секретного ключа доступа.
     * `bucket` — имя бакета.
     * `acl` — параметры управления доступом [ACL](../../concepts/acl.md#predefined-acls).
     * `website` — параметры сайта:
       * `index_document` — абсолютный путь к файлу главной страницы сайта. Обязательный параметр.

         {% note warning %}
         
         [Ключ объекта](../../concepts/object.md#key) с главной страницей сайта не может содержать символ `/`.
         
         {% endnote %}

       * `error_document` — абсолютный путь к файлу, который будет отображаться пользователю при ошибках 4xx. Необязательный параметр.

        {% note tip %}
        
        Если вы размещаете в бакете [одностраничное приложение](https://ru.wikipedia.org/wiki/Одностраничное_приложение), укажите в качестве страницы ошибки главную страницу, например `index.html`.
        
        {% endnote %}

  1. Создайте ресурсы:

      1. В терминале перейдите в директорию с конфигурационным файлом.
      1. Проверьте корректность конфигурации с помощью команды:
      
         ```bash
         terraform validate
         ```
      
         Если конфигурация является корректной, появится сообщение:
      
         ```bash
         Success! The configuration is valid.
         ```
      
      1. Выполните команду:
      
         ```bash
         terraform plan
         ```
      
         В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
      1. Примените изменения конфигурации:
      
         ```bash
         terraform apply
         ```
      
      1. Подтвердите изменения: введите в терминале слово `yes` и нажмите **Enter**.

  Terraform создаст все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в [консоли управления](https://kz.console.yandex.cloud).

- 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 %}

## Переадресация всех запросов {#redirects}

Переадресация всех запросов нужна для автоматического перенаправления всех обращений к бакету на другой URL или бакет, например при смене домена. При этом данные остаются доступными без изменения клиентских запросов.

{% note info %}

Опции хостинга статического сайта и переадресации всех запросов — взаимоисключающие.

{% endnote %}

{% list tabs group=instructions %}

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

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог.
  1. Перейдите в сервис **Object Storage**.
  1. Выберите бакет, для которого хотите настроить переадресацию всех запросов.
  1. На панели слева выберите ![image](../../../_assets/console-icons/wrench.svg) **Настройки**.
  1. Выберите вкладку **Веб-сайт**.
  1. В разделе **Переадресация** укажите:
      * **Доменное имя** хоста, на который будут перенаправляться все запросы к бакету.
      * (Опционально) **Протокол**, если указанный хост принимает запросы строго по определенному протоколу.
  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 update --help
     ```
     
  1. Создайте файл с настройками переадресации в формате JSON. Например:
     
     ```json
     {
       "redirectAllRequests": {
         "protocol": "PROTOCOL_HTTP",
         "hostname": "example.com"
       }
     }
     ```

     Где:
     * `protocol` — протокол передачи данных: `PROTOCOL_HTTP` или `PROTOCOL_HTTPS`. По умолчанию используется протокол из исходного запроса.
     * `hostname` — доменное имя хоста, на который будут перенаправляться все запросы к текущему бакету.
  
  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"
     ```

- Terraform {#tf}
 
  [Terraform](https://www.terraform.io/) позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
  
  Terraform распространяется под лицензией [Business Source License](https://github.com/hashicorp/terraform/blob/main/LICENSE), а [провайдер Yandex Cloud для Terraform](https://github.com/yandex-cloud/terraform-provider-yandex) — под лицензией [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/).
  
  Подробная информация о ресурсах провайдера в документации на сайте [Terraform](https://www.terraform.io/docs/providers/yandex/index.html) или в [зеркале](../../../terraform/index.md).

  
  Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
  
  
  Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../../terraform/authentication.md) соответствующим способом.


  
  {% note warning %}
  
  Для корректной работы Terraform в [регионе Казахстан](../../../overview/concepts/region.md) укажите в конфигурационном файле Terraform в блоке `provider` эндпоинты API Yandex Cloud и Object Storage: 
  
  ```hcl
  provider "yandex" {
    zone             = "kz1-a"
    endpoint         = "api.yandexcloud.kz:443"
    storage_endpoint = "https://storage.yandexcloud.kz"
  }
  ```
  
  Подробнее о настройках провайдера в разделе [Настройте провайдер](../../../tutorials/infrastructure-management/terraform-quickstart.md#configure-provider).
  
  {% endnote %}


  Чтобы настроить переадресацию всех запросов:

  1. Откройте файл конфигурации Terraform и добавьте параметр `redirect_all_requests_to` в описание ресурса `yandex_storage_bucket`:

     ```hcl
     ...
     resource "yandex_storage_bucket" "test" {
       access_key = "<идентификатор_статического_ключа>"
       secret_key = "<секретный_ключ>"
       bucket     = "<имя_бакета>"
       acl        = "public-read"
     
       website {
         index_document = "<абсолютный_путь_к_файлу_главной_страницы_сайта>"
         error_document = "<абсолютный_путь_к_файлу_ошибок>"
		 redirect_all_requests_to = "<имя_хоста>"
       }
     }
     ...
     ```

     Где:
     * `access_key` — идентификатор статического ключа доступа.

        {% note info %}
        
        Кроме статических ключей доступа для аутентификации в Object Storage можно использовать IAM-токен. Подробнее смотрите в разделе [Создание бакета](../buckets/create.md) и в [документации провайдера](../../../terraform/resources/storage_object.md). 
        
        {% endnote %}

     * `secret_key` — значение секретного ключа доступа.
     * `bucket` — имя бакета.
     * `acl` — параметры управления доступом [ACL](../../concepts/acl.md#predefined-acls).
     * `website` — параметры сайта:
       * `index_document` — абсолютный путь к файлу главной страницы сайта. Обязательный параметр.
       * `error_document` — абсолютный путь к файлу, который будет отображаться пользователю при ошибках 4xx. Необязательный параметр.
       * `redirect_all_requests_to` — доменное имя хоста, на который будут перенаправляться все запросы к текущему бакету. Вы можете указать префикс протокола (`http://` или `https://`). По умолчанию используется протокол из исходного запроса.

     Более подробная информация о параметрах ресурса `yandex_storage_bucket` в Terraform приведена в [документации провайдера](../../../terraform/resources/storage_bucket.md#static-website-hosting).

  1. Создайте ресурсы:

      1. В терминале перейдите в директорию с конфигурационным файлом.
      1. Проверьте корректность конфигурации с помощью команды:
      
         ```bash
         terraform validate
         ```
      
         Если конфигурация является корректной, появится сообщение:
      
         ```bash
         Success! The configuration is valid.
         ```
      
      1. Выполните команду:
      
         ```bash
         terraform plan
         ```
      
         В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
      1. Примените изменения конфигурации:
      
         ```bash
         terraform apply
         ```
      
      1. Подтвердите изменения: введите в терминале слово `yes` и нажмите **Enter**.

     Проверить настройку переадресации запросов можно в [консоли управления](https://kz.console.yandex.cloud).

- 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 %}

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

## Условная переадресация запросов {#redirects-on-conditions}

  С помощью правил переадресации можно перенаправить на другую веб-страницу запросы к удаленным объектам или запросы, возвращающие ошибку. Переадресация происходит в соответствии с условием, состоящим из префикса ключа объекта и HTTP-кода ответа. В сервисе действуют [лимиты](../../concepts/limits.md#storage-limits) на максимальное количество правил для условной переадресации запросов.

{% list tabs group=instructions %}

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

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог.
  1. Перейдите в сервис **Object Storage**.
  1. Выберите бакет, для которого хотите настроить условную переадресацию запросов.
  1. На панели слева выберите ![image](../../../_assets/console-icons/wrench.svg) **Настройки**.
  1. Выберите вкладку **Веб-сайт**.
  1. В разделе **Хостинг** в блоке **Переадресация** нажмите кнопку **Добавить правило переадресации**.
  1. В блоке **Условие** укажите как минимум одно условие переадресации:
      * **Код ответа** — HTTP-код, которым Object Storage должен был бы ответить на запрос без переадресации.
      * **Начало ключа** — начало ключа объекта в запросе. [Подробнее о ключах и устройстве статического сайта](#static-site-information).
    
     Если запрос соответствует условиям нескольких правил переадресации, сработает последнее подходящее правило. При этом глубина совпадения ключа объекта с указанным в условии префиксом не имеет значения.
    
  1. В блоке **Переадресация** задайте параметры переадресации:
      * **Протокол**, по которому должен быть отправлен переадресованный запрос.
      * **Доменное имя** хоста, на который должны перенаправляться запросы, удовлетворившие условию.
      * **Код ответа** для определения типа редиректа.
      * **Заменять ключ** — **Не заменять**, **Весь ключ** или **Только начало**, указанное в условии.
  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 update --help
     ```
     
  1. Создайте файл с настройками условной переадресации в формате JSON. Например:
     
     ```json
     {
       "index": "index.html",
       "error": "error404.html",
       "routingRules": [
         {
           "condition": {
             "httpErrorCodeReturnedEquals": "404",
             "keyPrefixEquals": "key"
           },
           "redirect": {
             "hostname": "example.com",
             "httpRedirectCode": "301",
             "protocol": "PROTOCOL_HTTP",
             "replaceKeyPrefixWith": "prefix",
             "replaceKeyWith": "key"
           } 
         }
       ]
     }
     ```

     Где:
     * `index` — абсолютный путь к файлу главной страницы сайта. Обязательный параметр.

         {% note info %}

         Абсолютный путь к файлу главной страницы необходимо передавать с настройками условной переадресации, даже если этот параметр для бакета уже задан.

         {% endnote %}

     * `error` — абсолютный путь к файлу, который будет отображаться пользователю при ошибках 4xx. Необязательный параметр.
     * `condition` — условие, при котором выполняется перенаправление:
     
       * `httpErrorCodeReturnedEquals` — HTTP-код ответа.
       * `keyPrefixEquals` — префикс ключа объекта.

       Если запрос соответствует условиям нескольких правил переадресации, сработает последнее подходящее правило. При этом глубина совпадения ключа объекта с указанным в условии префиксом не имеет значения.
       
     * `redirect` — настройки перенаправления:
     
       * `hostname` — доменное имя хоста, на который будут перенаправляться все запросы к текущему бакету.
       * `httpRedirectCode` — новый HTTP-код ответа.
       * `protocol` — новый протокол передачи данных: `PROTOCOL_HTTP` или `PROTOCOL_HTTPS`. По умолчанию используется протокол из исходного запроса. 
       * `replaceKeyPrefixWith` — новый префикс ключа объекта.
       * `replaceKeyWith` — новый ключ объекта.
  
  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"
     ```

- Terraform {#tf}
 
  [Terraform](https://www.terraform.io/) позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
  
  Terraform распространяется под лицензией [Business Source License](https://github.com/hashicorp/terraform/blob/main/LICENSE), а [провайдер Yandex Cloud для Terraform](https://github.com/yandex-cloud/terraform-provider-yandex) — под лицензией [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/).
  
  Подробная информация о ресурсах провайдера в документации на сайте [Terraform](https://www.terraform.io/docs/providers/yandex/index.html) или в [зеркале](../../../terraform/index.md).

    
  Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
  
  
  Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../../terraform/authentication.md) соответствующим способом.


  
  {% note warning %}
  
  Для корректной работы Terraform в [регионе Казахстан](../../../overview/concepts/region.md) укажите в конфигурационном файле Terraform в блоке `provider` эндпоинты API Yandex Cloud и Object Storage: 
  
  ```hcl
  provider "yandex" {
    zone             = "kz1-a"
    endpoint         = "api.yandexcloud.kz:443"
    storage_endpoint = "https://storage.yandexcloud.kz"
  }
  ```
  
  Подробнее о настройках провайдера в разделе [Настройте провайдер](../../../tutorials/infrastructure-management/terraform-quickstart.md#configure-provider).
  
  {% endnote %}


  Чтобы настроить условную переадресацию запросов:

  1. Откройте файл конфигурации Terraform и добавьте параметр `routing_rules` в описание бакета:

     ```hcl
     ...
     resource "yandex_storage_bucket" "test" {
       access_key = "<идентификатор_статического_ключа>"
       secret_key = "<секретный_ключ>"
       bucket     = "<имя_бакета>"
       acl        = "public-read"
     
       website {
         index_document = "<абсолютный_путь_к_файлу_главной_страницы_сайта>"
         error_document = "<абсолютный_путь_к_файлу_ошибок>"
         routing_rules  = <<EOF
         [
	       {
             "Condition": {
               "KeyPrefixEquals": "<префикс_ключа_объекта>",
               "HttpErrorCodeReturnedEquals": "<HTTP-код_ответа>"
             },
             "Redirect": {
               "Protocol": "<новая_схема>",
               "HostName": "<новое_доменное_имя>",
               "ReplaceKeyPrefixWith": "<новый_префикс_ключа_объекта>",
               "ReplaceKeyWith": "<новый_ключ_объекта>",
               "HttpRedirectCode": "<новый_HTTP-код_ответа>"
             }
           },
         ...
         ]
         EOF
       }
     }
     ...
     ```

     Где:
     * `access_key` — идентификатор статического ключа доступа.

        {% note info %}
        
        Кроме статических ключей доступа для аутентификации в Object Storage можно использовать IAM-токен. Подробнее смотрите в разделе [Создание бакета](../buckets/create.md) и в [документации провайдера](../../../terraform/resources/storage_object.md). 
        
        {% endnote %}

     * `secret_key` — значение секретного ключа доступа.
     * `bucket` — имя бакета.
     * `acl` — параметры управления доступом [ACL](../../concepts/acl.md#predefined-acls).
     * `website` — параметры сайта:
       * `index_document` — абсолютный путь к файлу главной страницы сайта. Обязательный параметр.
       * `error_document` — абсолютный путь к файлу, который будет отображаться пользователю при ошибках 4xx. Необязательный параметр.
       * `routing_rules` — правила переадресации запросов в формате JSON. В полях `Condition` и `Redirect` каждого правила должно быть как минимум по одной паре <q>ключ — значение</q>. Подробнее о поддерживаемых полях в [схеме данных](../../s3/api-ref/hosting/upload.md#request-scheme) соответствующего метода [API](../../../glossary/rest-api.md) (вкладка **Для условной переадресации запросов**).

     Более подробная информация о параметрах ресурса `yandex_storage_bucket` в Terraform приведена в [документации провайдера](../../../terraform/resources/storage_bucket.md#static-website-hosting).
  1. Создайте ресурсы:

      1. В терминале перейдите в директорию с конфигурационным файлом.
      1. Проверьте корректность конфигурации с помощью команды:
      
         ```bash
         terraform validate
         ```
      
         Если конфигурация является корректной, появится сообщение:
      
         ```bash
         Success! The configuration is valid.
         ```
      
      1. Выполните команду:
      
         ```bash
         terraform plan
         ```
      
         В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
      1. Примените изменения конфигурации:
      
         ```bash
         terraform apply
         ```
      
      1. Подтвердите изменения: введите в терминале слово `yes` и нажмите **Enter**.

     Проверить настройку условной переадресации запросов можно в [консоли управления](https://kz.console.yandex.cloud).

- 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 %}

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

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

* [Как исправить некорректный MIME-тип объектов при их загрузке в бакет?](../../qa.md#qa-mime-type)
* [Собственный домен](own-domain.md)
* [Поддержка нескольких доменных имен](multiple-domains/index.md)
* [Настройка HTTPS](certificate.md)