[Документация Yandex Cloud](../../index.md) > [Yandex Application Load Balancer](../index.md) > [Пошаговые инструкции](index.md) > HTTP-роутеры > Создать HTTP-роутер для HTTP-трафика

# Создать HTTP-роутер для HTTP-трафика

Чтобы создать [HTTP-роутер](../concepts/http-router.md) и добавить в него [маршрут](../concepts/http-router.md#routes):

{% list tabs group=instructions %}

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

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите [каталог](../../resource-manager/concepts/resources-hierarchy.md#folder), в котором будет создаваться HTTP-роутер.
  1. Перейдите в сервис **Application Load Balancer**.
  1. На панели слева выберите ![image](../../_assets/console-icons/route.svg) **HTTP-роутеры**.
  1. Нажмите кнопку **Создать HTTP-роутер**.
  1. Введите имя HTTP-роутера.
  1. В блоке **Виртуальные хосты** нажмите кнопку **Добавить виртуальный хост**.
  1. В поле **Имя** задайте имя создаваемого виртуального хоста. Требования к имени:
     
     * длина — от 3 до 63 символов;
     * может содержать строчные буквы латинского алфавита, цифры и дефисы;
     * первый символ — буква, последний — не дефис.
  1. (Опционально) В поле **Authority** укажите значение заголовка `Host` для HTTP/1.1 или псевдо-заголовка `:authority` для HTTP/2, по которому будет выбираться виртуальный хост.

      Если значение для поля **Authority** не задано, на виртуальный хост будет направляться весь трафик (равноценно значению `*`).
  1. (Опционально) В поле **Профиль безопасности** выберите [профиль безопасности](../../smartwebsecurity/concepts/profiles.md) сервиса [Yandex Smart Web Security](../../smartwebsecurity/index.md). Профиль безопасности позволяет настроить фильтрацию входящих запросов и подключить [WAF](../../smartwebsecurity/concepts/waf.md) для защиты от вредоносной активности. Подробнее в разделе [Профили безопасности](../../smartwebsecurity/concepts/profiles.md).
     
     
     {% note warning %}
     
     Функциональность доступна только в [регионе Россия](../../overview/concepts/region.md).
     
     {% endnote %}
  1. (Опционально) Включите опции **Ограничивать все запросы** и/или **Ограничивать запросы с одного IP** и задайте ограничения на количество запросов, которые виртуальный хост будет обрабатывать за единицу времени.
  1. (Опционально) Разверните блок **Изменение заголовков**, нажмите кнопку **Изменить заголовок** и настройте [HTTP-заголовки](https://ru.wikipedia.org/wiki/Список_заголовков_HTTP):
     
     * В поле **Тип** выберите, где требуется изменить заголовок:
         * `Запрос` — модифицировать заголовки во входящих запросах — от клиента к балансировщику.
         * `Ответ` — модифицировать заголовки исходящих ответов от бэкенда к внешнему клиенту.
     * В поле **Имя заголовка** укажите имя заголовка. Например: `Host`, `User-Agent`, `X-Forwarded-For`, `Strict-Transport-Security` и т.п.
     * В поле **Операция** выберите действие:
         * `append` — чтобы добавить строку к значению заголовка. Строку, которую требуется добавить, укажите в поле справа.
         * `replace` — чтобы полностью заменить значение заголовка. Новое значение заголовка укажите в поле справа.
         * `remove` — чтобы удалить заголовок. При этом будут удалены не только значение заголовка, но и сам заголовок.
         * `rename` — чтобы изменить имя заголовка. Новое имя заголовка укажите в поле справа. Значение заголовка при этом не изменяется.
     
     При необходимости воспользуйтесь кнопкой **Изменить заголовок**, чтобы добавить новые строки, если вам требуется изменить одновременно несколько заголовков.
  1. Нажмите кнопку **Добавить маршрут** и в открывшейся форме **Новый маршрут**:

      1. В поле **Имя** укажите имя создаваемого маршрута. Требования к имени:
         
         * длина — от 3 до 63 символов;
         * может содержать строчные буквы латинского алфавита, цифры и дефисы;
         * первый символ — буква, последний — не дефис.
      1. В поле **Тип** выберите `HTTP`.
      1. В поле **Путь** выберите одну из опций:
         
         * `Совпадает с` — чтобы маршрутизировать запросы, путь в которых идентичен пути, заданному в текстовом поле справа. Например, чтобы маршрутизировать все запросы, укажите путь `/`.
         * `Начинается с` — чтобы маршрутизировать запросы, путь в которых начинается с префикса, заданного в текстовом поле справа.
         * `Регулярное выражение` — чтобы маршрутизировать запросы, путь в которых удовлетворяет [регулярному выражению](https://ru.wikipedia.org/wiki/Регулярные_выражения) стандарта [RE2](https://github.com/google/re2/wiki/Syntax), заданному в текстовом поле справа. Например: `\/[a-z]{10}[0-9]{3}`.
      1. В поле **Методы HTTP** выберите нужные HTTP-[методы](https://ru.wikipedia.org/wiki/HTTP#Методы), запросы с которыми необходимо маршрутизировать.
      1. В поле **Действие** выберите одну из опций: `Маршрутизация`, `Перенаправление` или `Ответ`. В зависимости от выбранной опции:
         
         {% list tabs %}
         
         - Маршрутизация
         
           * В поле **Группа бэкендов** выберите [группу бэкендов](../concepts/backend-group.md), расположенную в том же каталоге, в котором находятся [HTTP-роутер](../concepts/http-router.md) и виртуальный хост, для которых вы создаете маршрут.
           * (Опционально) В поле **Замена пути или начала** укажите путь, по которому HTTP-роутер должен перенаправлять трафик. Если ранее в поле **Путь** вы выбрали опцию `Совпадает с`, путь будет полностью заменен. Если была выбрана опция `Начинается с`, будет изменено только начало.
           * (Опционально) В поле **Замена заголовка Host** выберите одну из опций:
             
             * `none` — заголовок Host в запросе не изменяется.
             * `rewrite` — заголовок Host в запросе заменяется на указанное значение.
             * `auto` — заголовок Host в запросе автоматически заменяется на адрес целевой [виртуальной машины](../../compute/concepts/vm.md).
           * (Опционально) Включите опции **Ограничивать все запросы** и/или **Ограничивать запросы с одного IP** и задайте соответствующие ограничения на количество запросов, которые будут обрабатываться для данного маршрута за единицу времени.
           * (Опционально) В поле **Таймаут, с** укажите максимальное время, на которое может быть установлено соединение.
           * (Опционально) В поле **Таймаут простоя, с** укажите максимальное время keep-alive, в течение которого соединение может простаивать без передачи данных.
           * (Опционально) В поле **Допустимые значения заголовка Upgrade**:
         
               * (Опционально) Укажите список протоколов, на которые группа бэкендов может перейти в рамках TCP-соединения по запросу клиента. Используйте кнопку **Добавить тип модификации**, чтобы добавлять дополнительные протоколы.
               * (Опционально) Включите опцию **WebSocket**, если вы хотите использовать протокол [WebSocket](https://ru.wikipedia.org/wiki/WebSocket).
         
         - Перенаправление
         
           * В поле **Код состояния HTTP** выберите код, по которому будет осуществляться перенаправление:
         
               * `301 Moved Permanently`;
               * `302 Found`;
               * `303 See Other`;
               * `307 Temporary Redirect`;
               * `308 Permanent Redirect`.
           * (Опционально) Включите опцию **Замена пути или начала** и укажите тип модификации пути, по которому HTTP-роутер должен перенаправлять трафик:
         
               * `Весь путь` — чтобы полностью заменить путь запроса на значение, заданное в поле справа.
               * `Начало` — чтобы изменить префикс пути запроса на значение, заданное в поле справа.
         
               {% note info %}
         
               Если в поле **Путь** выше вы выбрали опцию `Совпадает с`, путь будет полностью заменен, даже если в поле **Замена пути или начала** выбрана опция `Начало`.
         
               {% endnote %}
         
           * (Опционально) Включите опцию **Удалить query-параметры**, чтобы удалять из запросов все query-параметры.
           * (Опционально) Включите опцию **Изменить схему**, чтобы изменять схему в запросах на схему, заданную в поле справа.
         
               Если в исходном URI использована схема `http` (`https`) и указан порт `80` (`443`), при изменении схемы порт будет удален.
           * (Опционально) Включите опцию **Изменить хост** и в поле справа укажите новый хост.
           * (Опционально) Включите опцию **Изменить порт** и в поле справа укажите новый порт.
         
         - Ответ
         
           * В поле **Код состояния HTTP** выберите код статического ответа, который будет отправляться на запрос.
           * В поле **Тело ответа** задайте тело статического ответа на запросы. Для этого нажмите кнопку **Выбрать** и в открывшемся окне:
         
               * В поле **Способ** выберите:
         
                   * `Файл` — чтобы выбрать текстовый файл, содержащий тело ответа.
                   * `Текст` — чтобы указать текст ответа в текстовом поле.
                   * Нажмите кнопку **Добавить**.
         
         {% endlist %}
  1. Нажмите кнопку **Создать**.

- 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](../../cli/index.md) для создания HTTP-роутера:

      ```bash
      yc alb http-router create --help
      ```
  1. Выполните команду:

      ```bash
      yc alb http-router create <имя_HTTP-роутера>
      ```

      Результат:

      ```text
      id: a5dcsselagj4********
      name: test-http-router
      folder_id: aoerb349v3h4********
      created_at: "2021-02-11T21:04:59.438292069Z"
      ```
  1. Посмотрите описание команды CLI для создания виртуального хоста:
     
     ```bash
     yc alb virtual-host create --help
     ```
  1. Создайте виртуальный хост, указав его имя и настройки:
     
     ```bash
     yc alb virtual-host create <имя_виртуального_хоста> \
       --http-router-name <имя_HTTP-роутера> \
       --authority <домен_1>,<домен_2>,...,<домен_n> \
       --modify-request-header name=Accept-Language,append=ru-RU \
       --modify-response-header name=Accept-Charset,replace=utf-8 \
       --rate-limit rps=100,all-requests \
       --security-profile-id <идентификатор_профиля_безопасности>
     ```
     
     Где:
     * `--http-router-name` — имя HTTP-роутера.
     
         Вместо имени HTTP-роутера вы можете указать его идентификатор в параметре `--http-router-id`.
     * `--authority` — список доменов для заголовков `Host` для HTTP/1.1 или `authority` для HTTP/2, которые будут связаны с этим виртуальным хостом. Несколько значений указываются через запятую. Поддерживаются символы подстановки, например `*.foo.com` или `*-bar.foo.com`. Для gRPC-трафика вы можете указать IP-адрес балансировщика.
     
         Необязательный параметр. Если значение не задано, на виртуальный хост будет направляться весь трафик.
     * `--modify-request-header` — настройки модификации HTTP-заголовка запроса в формате `<свойство>=<значение>`. Возможные свойства:
     
         * `name` — имя модифицируемого заголовка. Например: `Host`, `User-Agent`, `X-Forwarded-For`, `Strict-Transport-Security` и т.п.
         * `append` — добавить строку к текущему значению заголовка.
         * `replace` — полностью заменить текущее значение заголовка.
         * `rename` — изменить имя заголовка. Значение заголовка при этом не изменяется.
         * `remove` — удалить заголовок. При этом будет удалено не только значение заголовка, но и сам заголовок.
     
         Чтобы изменить несколько HTTP-заголовков в запросе, задайте в команде параметр `--modify-request-header` необходимое количество раз.
     
         Необязательный параметр: если не задан, заголовки запроса передаются в бэкенд в неизменном виде.
     
     * `--modify-response-header` — настройки модификации HTTP-заголовка ответа в формате `<свойство>=<значение>`. Возможные свойства:
     
         * `name` — имя модифицируемого заголовка. Например: `Host`, `User-Agent`, `X-Forwarded-For`, `Strict-Transport-Security` и т.п.
         * `append` — добавить строку к текущему значению заголовка.
         * `replace` — полностью заменить текущее значение заголовка.
         * `rename` — изменить имя заголовка. Значение заголовка при этом не изменяется.
         * `remove` — удалить заголовок. При этом будет удалено не только значение заголовка, но и сам заголовок.
     
         Чтобы изменить несколько HTTP-заголовков в ответе, задайте в команде параметр `--modify-response-header` необходимое количество раз.
     
         Необязательный параметр: если не задан, заголовки ответа передаются клиенту в неизменном виде.
     
     * `--rate-limit` — ограничение на частоту запросов. Возможные свойства:
         * `rps` или `rpm` — количество запросов, которые можно принять в секунду или в минуту.
         * `all-requests` — ограничение на все входящие запросы.
         * `requests-per-ip` — ограничение на количество запросов для каждого IP-адреса клиента в отдельности.
     
         Для одного виртуального хоста вы можете задать только один вид ограничения: либо свойство `all-requests`, либо — `requests-per-ip`.
     
         Необязательный параметр: если не задан, ограничение на частоту запросов не применяется.
     * `--security-profile-id` — идентификатор [профиля безопасности](../../smartwebsecurity/concepts/profiles.md) сервиса [Yandex Smart Web Security](../../smartwebsecurity/index.md). Профиль безопасности позволяет настроить фильтрацию входящих запросов, подключить [WAF](../../smartwebsecurity/concepts/waf.md) и установить лимиты на количество запросов для защиты от вредоносной активности. Подробнее в разделе [Профили безопасности](../../smartwebsecurity/concepts/profiles.md). Необязательный параметр.
     
         
         {% note warning %}
         
         Функциональность доступна только в [регионе Россия](../../overview/concepts/region.md).
         
         {% endnote %}
     
     
     Результат:
     
     ```text
     name: test-virtual-host
     authority:
       - example.com
       - example.org
     modify_request_headers:
       - name: Accept-Language
         append: ru-RU
       - name: Accept-Charset
         replace: utf-8
     route_options:
       security_profile_id: fevu5fnuk6vf********
     rate_limit:
       all_requests:
         per_second: "100"
     ```
  1. Посмотрите описание команды CLI для добавления маршрута в конец списка маршрутов виртуального хоста:
     
     ```bash
     yc alb virtual-host append-http-route --help
     ```
  1. Добавьте маршрут, указав его имя и дополнительные параметры:
     
     ```bash
     yc alb virtual-host append-http-route <имя_маршрута> \
       --http-router-name <имя_HTTP-роутера> \
       --virtual-host-name <имя_виртуального_хоста> \
       --match-http-method <метод_1>,<метод_2>,...<метод_n> \
       --exact-path-match <полный_путь> \
       --prefix-path-match <префикс_пути> \
       --regex-path-match <регулярное_выражение> \
       --backend-group-name <имя_группы_бэкендов> \
       --request-timeout <таймаут_запроса>s \
       --request-idle-timeout <таймаут_ожидания_запроса>s \
       --rate-limit rps=<лимит_запросов>,requests-per-ip \
       --disable-security-profile
     ```

      Где:

      * `--http-router-name` — имя HTTP-роутера, в котором создается маршрут.
      
          Вместо имени HTTP-роутера вы можете указать его идентификатор в параметре `--http-router-id`.
      * `--virtual-host-name` — имя виртуального хоста, в котором создается маршрут.
      * `--match-http-method` — список HTTP-[методов](https://ru.wikipedia.org/wiki/HTTP#Методы), запросы с которыми необходимо маршрутизировать. Например: `--match-http-method GET,POST,OPTIONS`. Необязательный параметр. Если не задан, маршрутизироваться будут запросы с любыми методами.
      * Параметры с условиями маршрутизации на основе пути:
      
          * `--exact-path-match` — маршрутизировать запросы, путь в которых идентичен заданному пути. Например, чтобы маршрутизировать все запросы, укажите путь `/`.
          * `--prefix-path-match` — маршрутизировать запросы, путь в которых начинается с заданного префикса. Например: `/myapp/`.
          * `--regex-path-match` — маршрутизировать запросы, путь в которых удовлетворяет заданному [регулярному выражению](https://ru.wikipedia.org/wiki/Регулярные_выражения) стандарта [RE2](https://github.com/google/re2/wiki/Syntax). Например: `\/[a-z]{10}[0-9]{3}\/`.
      
          {% note info %}
      
          Параметры `--exact-path-match`, `--prefix-path-match` и `--regex-path-match` — взаимоисключающие: вы можете использовать только один из них.
      
          {% endnote %}
      
      * `--backend-group-name` — имя [группы бэкендов](../concepts/backend-group.md), расположенной в том же каталоге, в котором находятся [HTTP-роутер](../concepts/http-router.md) и виртуальный хост, для которых вы создаете маршрут.
        
        Вместо имени группы бэкендов вы можете указать ее идентификатор в параметре `--backend-group-id`.
      * `--request-timeout` — максимальное время в секундах, на которое может быть установлено соединение по запросу.
      * `--request-idle-timeout` — максимальное время в секундах, в течение которого соединение может простаивать без передачи данных.
      * `--rate-limit` — ограничение на частоту запросов. Возможные свойства:
        
        * `rps` или `rpm` — количество запросов, которые можно принять в секунду или в минуту.
        * `all-requests` — ограничение на все входящие запросы.
        * `requests-per-ip` — ограничение на количество запросов для каждого IP-адреса клиента в отдельности.
        
        Для одного маршрута вы можете задать только один вид ограничения: либо свойство `all-requests`, либо — `requests-per-ip`.
        
        Необязательный параметр: если не задан, ограничение на частоту запросов не применяется.
      * `--disable-security-profile` — параметр, отключающий для маршрута использование [профиля безопасности](../../smartwebsecurity/concepts/profiles.md) сервиса [Yandex Smart Web Security](../../smartwebsecurity/index.md), заданного для виртуального хоста. Профиль безопасности позволяет настроить фильтрацию входящих запросов, подключить [WAF](../../smartwebsecurity/concepts/waf.md) и установить лимиты на количество запросов для защиты от вредоносной активности. Подробнее в разделе [Профили безопасности](../../smartwebsecurity/concepts/profiles.md). Необязательный параметр. По умолчанию профиль безопасности, привязанный к виртуальному хосту, действует в отношении всех создаваемых маршрутов.
      
          
          {% note warning %}
          
          Функциональность доступна только в [регионе Россия](../../overview/concepts/region.md).
          
          {% endnote %}

      {% cut "Результат:" %}
      
      ```text
      name: test-virtual-host
      authority:
        - example.com
      routes:
        - name: my-first-route
          http:
            match:
              path:
                prefix_match: /
            route:
              backend_group_id: ds7dnf2s5dco********
              timeout: 60s
              auto_host_rewrite: false
        - name: my-second-route
          http:
            match:
              http_method:
                - GET
                - POST
                - OPTIONS
              path:
                exact_match: /
            route:
              backend_group_id: ds7dnf2s5dco********
              timeout: 2s
              idle_timeout: 5s
              rate_limit:
                requests_per_ip:
                  per_second: "10"
          disable_security_profile: true
      modify_request_headers:
        - name: Accept-Language
          append: ru-RU
      route_options:
        security_profile_id: fevu5fnuk6vf********
      rate_limit:
        all_requests:
          per_second: "100"
      ```
      
      {% endcut %}
      
      Подробнее о команде `yc alb virtual-host append-http-route` с полным перечнем параметров в [справочнике CLI](../../cli/cli-ref/application-load-balancer/cli-ref/virtual-host/append-http-route.md).

- 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) соответствующим способом.

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

      ```hcl
      resource "yandex_alb_http_router" "tf-router" {
        name          = "<имя_HTTP-роутера>"
        labels        = {
          tf-label    = "tf-label-value"
          empty-label = ""
        }
      }

      resource "yandex_alb_virtual_host" "my-virtual-host" {
        name           = "<имя_виртуального_хоста>"
        http_router_id = yandex_alb_http_router.tf-router.id

        rate_limit {
          all_requests {
            per_second = <количество_запросов_в_секунду>
            # или per_minute = <количество_запросов_в_минуту>
          }
          requests_per_ip {
            per_second = <количество_запросов_в_секунду>
            # или per_minute = <количество_запросов_в_минуту>
          }
        }

        route {
          name                      = "<имя_маршрута>"
          disable_security_profile  = true|false

          http_route {
            http_match {
              http_method = ["<HTTP-метод_1>","<HTTP-метод_2>",...,"<HTTP-метод_n>"]
              path {
                prefix = "/<префикс_пути_запроса>/"
                # или exact = "<путь_запроса>"
                # или regex = "<регулярное_выражение>"
              }
            }

            http_route_action {
              backend_group_id  = "<идентификатор_группы_бэкендов>"
              host_rewrite      = "<значение_заголовка_Host>"
              timeout           = "<таймаут_соединения>s"
              idle_timeout      = "<таймаут-простоя>s"
              prefix_rewrite    = "<новый_префикс_пути_запроса>/"
              rate_limit {
                all_requests {
                  per_second = <количество_запросов_в_секунду>
                  # или per_minute = <количество_запросов_в_минуту>
                }
                requests_per_ip {
                  per_second = <количество_запросов_в_секунду>
                  # или per_minute = <количество_запросов_в_минуту>
                }
              }
            }
          }
        }

        authority        = ["<домен_1>","<домен_2>",...,"<домен_n>"]

        modify_request_headers {
          name           = "<имя_заголовка>"
          append         = "<добавляемая_в_содержимое_заголовка_строка>"
          # или replace  = "<новое_содержимое_заголовка>"
          # или remove   = true|false
        }

        modify_response_headers {
          name           = "<имя_заголовка>"
          append         = "<добавляемая_в_содержимое_заголовка_строка>"
          # или replace  = "<новое_содержимое_заголовка>"
          # или remove   = true|false
        }

        route_options {
          security_profile_id = "<идентификатор_профиля_безопасности>"
        }
      }
      ```

      Где:

      * `yandex_alb_http_router` — описание HTTP-роутера:
          * `name` — имя HTTP-роутера. Формат имени:

              * длина — от 3 до 63 символов;
              * может содержать строчные буквы латинского алфавита, цифры и дефисы;
              * первый символ — буква, последний — не дефис.

          * `labels` — [метки](../../resource-manager/concepts/labels.md) для HTTP-роутера. Укажите пару ключ-значение.
      * `yandex_alb_virtual_host` — описание виртуального хоста:

          * `name` — имя виртуального хоста. Формат имени:
          
              * длина — от 3 до 63 символов;
              * может содержать строчные буквы латинского алфавита, цифры и дефисы;
              * первый символ — буква, последний — не дефис.
          
          * `http_router_id` — идентификатор HTTP-роутера.
          * `rate_limit` — (опционально) ограничение частоты запросов для всего виртуального хоста.
              * `all_requests` — (опционально) ограничение всех запросов в секунду или в минуту:
                  * `per_second` — максимальное количество входящих запросов, которые могут поступать на виртуальный хост за одну секунду.
                  * `per_minute` — максимальное количество входящих запросов, которые могут поступать на виртуальный хост за одну минуту.
          
                  Параметры `per_second` и `per_minute` — взаимоисключающие: вы можете использовать только один из них.
              * `requests_per_ip` — (опционально) дополнительное ограничение запросов для каждого IP-адреса в секунду или в минуту:
                  * `per_second` — максимальное количество входящих запросов с одного IP-адреса, которые могут поступать на виртуальный хост за одну секунду.
                  * `per_minute` — максимальное количество входящих запросов с одного IP-адреса, которые могут поступать на виртуальный хост за одну минуту.
          
                  Параметры `per_second` и `per_minute` — взаимоисключающие: вы можете использовать только один из них.

          * `route` — описание маршрута виртуального хоста:

              * `name` — имя маршрута.
              * `disable_security_profile` — (опционально) опция отключения [профиля безопасности](../../smartwebsecurity/concepts/profiles.md) сервиса [Yandex Smart Web Security](../../smartwebsecurity/index.md). Возможные значения: `true` (профиль отключен) или `false` (профиль включен). По умолчанию профиль безопасности включен (значение `false`).

              * `http_route` — описание маршрута для HTTP-трафика:
              
                  * `http_match` — (опционально) параметр для фильтрации входящих HTTP-запросов:
              
                      * `http_method` — (опционально) список HTTP-[методов](https://ru.wikipedia.org/wiki/HTTP#Методы), запросы с которыми будут маршрутизироваться. По умолчанию маршрутизируются запросы с любыми методами.
                      * `path` — (опционально) параметры для фильтрации пути входящего запроса:
              
                          * `exact` — маршрутизировать запросы, путь в которых идентичен заданному пути. Например, чтобы маршрутизировать все запросы, укажите путь `/`.
                          * `prefix` — маршрутизировать запросы, путь в которых начинается с заданного префикса.
                          * `regex` — маршрутизировать запросы, путь в которых удовлетворяет заданному [регулярному выражению](https://ru.wikipedia.org/wiki/Регулярные_выражения) стандарта [RE2](https://github.com/google/re2/wiki/Syntax). Например: `\/[a-z]{10}[0-9]{3}\/`.
              
                          Параметры `exact`, `prefix` и `regex` — взаимоисключающие: вы можете использовать только один из них.
              
                  * `http_route_action` — параметр для указания действия с HTTP-трафиком.
              
                      * `backend_group_id` — идентификатор [группы бэкендов](../concepts/backend-group.md), расположенной в том же каталоге, в котором находятся [HTTP-роутер](../concepts/http-router.md) и виртуальный хост, для которых создается маршрут.
                      * `host_rewrite` — (опционально) замена заголовка Host в запросе на указанное значение. Вместо параметра `host_rewrite` вы можете указать параметр `auto_host_rewrite` — в этом случае заголовок Host в запросе автоматически будет заменяться на адрес целевой [виртуальной машины](../../compute/concepts/vm.md).
                      * `timeout` — (опционально) максимальное время, на которое может быть установлено соединение, в секундах. Значение по умолчанию — 60 секунд.
                      * `idle_timeout` — (опционально) максимальное время keep-alive, в течение которого соединение может простаивать без передачи данных. Если не задано, соединение без передачи данных будет сразу разрываться.
                      * `prefix_rewrite` — (опционально) значение, на которое будет заменен путь или часть пути запроса, указанные в параметре `path`.
                      * `rate_limit` — (опционально) параметр для ограничения количества запросов за единицу времени:
                        
                        * `all_requests` — (опционально) ограничение на все входящие запросы:
                        
                            * `per_second` — максимальное количество входящих запросов, которые могут поступать в маршрут за одну секунду.
                            * `per_minute` — максимальное количество входящих запросов, которые могут поступать в маршрут за одну минуту.
                        
                            Параметры `per_second` и `per_minute` — взаимоисключающие: вы можете использовать только один из них.
                        * `requests_per_ip` — (опционально) ограничение на входящие запросы с одного IP-адреса:
                        
                            * `per_second` — максимальное количество входящих запросов с одного IP-адреса, которые могут поступать в маршрут за одну секунду.
                            * `per_minute` — максимальное количество входящих запросов с одного IP-адреса, которые могут поступать в маршрут за одну минуту.
                        
                            Параметры `per_second` и `per_minute` — взаимоисключающие: вы можете использовать только один из них.

          * `authority` — домены для заголовков `Host` для HTTP/1.1 или `authority` для HTTP/2, которые будут связаны с этим виртуальным хостом. Поддерживаются символы подстановки, например `*.foo.com` или `*-bar.foo.com`. Для gRPC-трафика вы можете указать `*` или IP-адрес балансировщика.
          
              Необязательный параметр. Если значение не задано, на виртуальный хост будет направляться весь трафик.
          * `modify_request_headers` — настройки модификации HTTP-заголовков запроса. Возможные параметры:
          
              * `name` — имя модифицируемого заголовка. Например: `Host`, `User-Agent`, `X-Forwarded-For`, `Strict-Transport-Security` и т.п.
              * `append` — добавить строку к текущему значению заголовка.
              * `replace` — полностью заменить текущее значение заголовка.
              * `remove` — удалить заголовок. При этом будет удалено не только значение заголовка, но и сам заголовок. Возможные значения: `true` или `false`.
          
              Необязательный параметр: если не задан, заголовки запроса передаются в бэкенд в неизменном виде.
          
          * `modify_response_headers` — настройки модификации HTTP-заголовков ответа. Возможные параметры:
          
              * `name` — имя модифицируемого заголовка. Например: `Host`, `User-Agent`, `X-Forwarded-For`, `Strict-Transport-Security` и т.п.
              * `append` — добавить строку к текущему значению заголовка.
              * `replace` — полностью заменить текущее значение заголовка.
              * `remove` — удалить заголовок. При этом будет удалено не только значение заголовка, но и сам заголовок. Возможные значения: `true` или `false`.
          
              Необязательный параметр: если не задан, заголовки ответа передаются клиенту в неизменном виде.
          * `route_options` — (опционально) дополнительные параметры виртуального хоста:
              * `security_profile_id` — идентификатор профиля безопасности. Профиль безопасности позволяет настроить фильтрацию входящих запросов, подключить [WAF](../../smartwebsecurity/concepts/waf.md) и установить лимиты на количество запросов для защиты от вредоносной активности. Подробнее в разделе [Профили безопасности](../../smartwebsecurity/concepts/profiles.md).
          
                  
                  {% note warning %}
                  
                  Функциональность доступна только в [регионе Россия](../../overview/concepts/region.md).
                  
                  {% endnote %}

      Параметры используемых ресурсов приведены в документации провайдера Terraform:
      * [yandex_alb_http_router](../../terraform/resources/alb_http_router.md)
      * [yandex_alb_virtual_host](../../terraform/resources/alb_virtual_host.md)
  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) или с помощью команды [CLI](../../cli/index.md):

      ```bash
      yc alb http-router get <имя_HTTP-роутера>
      ```

      {% note warning "Ограничения по времени" %}
      
      Провайдер Terraform ограничивает время на выполнение операций с HTTP-роутерами и виртуальными хостами Application Load Balancer 10 минутами.
      
      Операции, которые длятся дольше указанного времени, прерываются.
      
      {% cut "Как изменить эти ограничения?" %}
      
      Добавьте к описанию HTTP-роутера и виртуального хоста блоки `timeouts` (ресурсы `yandex_alb_http_router` и `yandex_alb_virtual_host` соответственно).
      
      Пример:
      
      ```hcl
      resource "yandex_alb_http_router" "<имя_роутера>" {
        ...
        timeouts {
          create = "60m"
          update = "60m"
          delete = "60m"
        }
      }
      ```
      
      {% endcut %}
      
      {% endnote %}

- API {#api}

  Воспользуйтесь методом REST API [create](../api-ref/HttpRouter/create.md) для ресурса [HttpRouter](../api-ref/HttpRouter/index.md) или вызовом gRPC API [HttpRouterService/Create](../api-ref/grpc/HttpRouter/create.md).

{% endlist %}