---
title: 'Балансировать трафик по URL запроса'
sidebar_label: 'Балансировать трафик по URL запроса'
sidebar_position: 2
description: 'Как настроить правило для балансировки трафика в зависимости от домена или пути запроса'
---

import Formbricks from '@theme/MDXComponents/Formbricks'

import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import {TabItemLabel} from '@selectel/docux/components'
import MoreVerticalIcon from '@selectel/docux/icons/more-vertical'
import CopyIcon from '@selectel/docux/icons/copy'

# Балансировать трафик по URL запроса

Вы можете направлять трафик на разные [целевые группы](/cloud-servers/load-balancers/about-load-balancers.mdx#target-groups) серверов в зависимости от того, какой домен и путь указаны в запросе.

<Tabs queryString="redirect-by-url">
  <TabItem value="panel" default>
    <TabItemLabel>
      Панель управления
    </TabItemLabel>

    1. В [панели управления](https://my.selectel.ru/vpc/default/lbaas/load-balancers/) в верхнем меню нажмите **Продукты** и выберите **Облачные серверы**.

    2. Перейдите в раздел **Балансировщики** → вкладка **Балансировщики**.

    3. Откройте страницу балансировщика.

    4. Нажмите **Создать правило**.

    5. Выберите протокол приема трафика — HTTPS. Будет автоматически выбран стандартный порт 443, на котором балансировщик будет слушать трафик.

    6. Выберите сертификат для терминации HTTPS-трафика на балансировщике — выберите сертификат из менеджера секретов или загрузите новый. Если правило будет принимать трафик для нескольких доменов, сертификат должен действовать на все домены, либо [добавьте несколько сертификатов](/cloud-servers/load-balancers/manage/ssl-certificates.mdx#add-certificates).

    7. Выберите целевую группу по умолчанию — туда будет направляться трафик, который не попал под [HTTP-политики](/cloud-servers/load-balancers/about-load-balancers.mdx#http-policies). Выберите группу из списка или [создайте новую целевую группу](/cloud-servers/load-balancers/target-groups/create-target-group.mdx), укажите для нее протокол назначения трафика HTTP и порт 80. Если вы хотите отбрасывать трафик, не попавший под HTTP-политику, выберите **Без целевой группы**.

    8. Отметьте [заголовки HTTP-запросов](/cloud-servers/load-balancers/about-load-balancers.mdx#http-request-headers), которые будут передаваться серверам.

    9. Создайте [HTTP-политику](/cloud-servers/load-balancers/about-load-balancers.mdx#http-policies), по которой будет происходить балансировка трафика. Для этого нажмите **Добавить новую политику**.

    10. Чтобы балансировать запрос по доменному имени, выберите условие проверки: **HOSTNAME** — **EQUAL TO**.

    11. Введите имя домена без протокола, например `example.com`.

    12. Нажмите **Новое условие**.

    13. Чтобы балансировать запрос по пути, выберите условие проверки: **PATH** — **STARTS WITH**.

    14. Введите текст, с которого должен начинаться путь запроса, например `/api`.

    15. Выберите действие **Направить на целевую группу**.

    16. Выберите целевую группу, куда будет направляться трафик, попавший под политику. Чтобы создать новую целевую группу, нажмите **Новая целевая группа** и [создайте целевую группу](/cloud-servers/load-balancers/target-groups/create-target-group.mdx) с протоколом HTTP и портом 80. Если вы хотите отбрасывать трафик, не попавший под HTTP-политику, выберите **Без целевой группы**.

    17. Опционально: измените имя политики или оставьте сформированное по умолчанию.

    18. Нажмите **Добавить**.

    19. Опционально: откройте блок **Расширенные настройки правила** и укажите [настройки соединений](/cloud-servers/load-balancers/about-load-balancers.mdx#connection-settings):

        * для входящих запросов на балансировщик — укажите таймаут соединения и максимум соединений;
        * для запросов от балансировщика к серверам — укажите таймаут соединения, таймаут неактивности и таймаут ожидания TCP-пакетов.

    20. Нажмите **Создать**.
  </TabItem>

  <TabItem value="openstack">
    <TabItemLabel>
      OpenStack CLI
    </TabItemLabel>

    1. [Откройте OpenStack CLI](/cloud-servers/tools/openstack-cli/).

    2. Если у вас еще нет [целевой группы](/cloud-servers/load-balancers/about-load-balancers.mdx#target-groups), куда будет балансироваться трафик, создайте ее:

       ```bash
       openstack loadbalancer pool create \
         --name <pool_name> \
         --lb-algorithm <algorithm> \
         --loadbalancer <loadbalancer> \
         --protocol HTTP
       ```

       Укажите:

       * `<pool_name>` — имя целевой группы;
       * `<algorithm>` — название алгоритма: `ROUND_ROBIN` или `LEAST_CONNECTIONS`
       * `<loadbalancer>` — ID или имя балансировщика нагрузки. Список можно посмотреть с помощью команды `openstack loadbalancer list`.

    3. Если на шаге 2 вы создали целевую группу, добавьте в нее сервер:

       ```bash
       openstack loadbalancer member create \
         --subnet-id <subnet_uuid> \
         --address <server_ip_address> \
         --protocol-port 80 \
         <pool>
       ```

       Укажите:

       * `<subnet_uuid>` — ID приватной или публичной подсети сервера. Список можно посмотреть с помощью команды `openstack subnet list`;
       * `<server_ip_address>` — приватный IP-адрес сервера. Можно скопировать в [панели управления](https://my.selectel.ru/vpc/default/servers/): в верхнем меню нажмите **Продукты** → **Облачные серверы** → страница сервера → вкладка **Порты** → в карточке порта нажмите <CopyIcon /> рядом с IP-адресом;
       * `<pool>` — ID или имя целевой группы, которую создали на шаге 2.

    4. Создайте [правило](/cloud-servers/load-balancers/about-load-balancers.mdx#rules) для балансировщика с протоколом TERMINATED\_HTTPS и портом 443:

       ```bash
       openstack loadbalancer listener create \
         --name <listener_name> \
         --protocol TERMINATED_HTTPS \
         --protocol-port 443 \
         --default-tls-container=<certificate_uuid> \
         --default-pool <default_pool> \
         <loadbalancer>
       ```

       Укажите:

       * `<listener_name>` — имя правила;
       * `<certificate_uuid>` — ID TLS(SSL)-сертификата для терминации трафика на балансировщике. Можно скопировать в [панели управления](https://my.selectel.ru/certificates/): в верхнем меню нажмите **Продукты** → **Менеджер сертификатов** → в меню <MoreVerticalIcon /> сертификата выберите **Скопировать UUID**. Если правило будет принимать трафик для нескольких доменов, сертификат должен действовать на все домены, либо [добавьте несколько сертификатов](/cloud-servers/load-balancers/manage/ssl-certificates.mdx#add-certificates);
       * опционально: `--default-pool <default_pool>` — ID или имя целевой группы по умолчанию, куда будет направляться трафик, не попавший под [HTTP-политики](/cloud-servers/load-balancers/about-load-balancers.mdx#http-policies) в правиле. Список групп можно посмотреть с помощью команды `openstack loadbalancer pool list`. Если у вас нет подходящей целевой группы, [создайте ее](/cloud-servers/load-balancers/target-groups/create-target-group.mdx). Если не указать параметр, не попавший под политики трафик будет отбрасываться;
       * `<loadbalancer>` — ID или имя балансировщика нагрузки. Список можно посмотреть с помощью команды `openstack loadbalancer list`.

    5. Создайте [HTTP-политику](/cloud-servers/load-balancers/about-load-balancers.mdx#http-policies) в правиле:

       ```bash
       openstack loadbalancer l7policy create \
         --action REDIRECT_TO_POOL \
         --redirect-pool <pool> \
         --name <policy_name> \
         <listener_name>
       ```

       Укажите:

       * `<pool>` — ID или имя целевой группы. Список можно посмотреть с помощью команды `openstack loadbalancer pool list`;
       * `<policy_name>` — имя L7-политики;
       * `<listener_name>` — имя правила, которое вы задали на шаге 4.

    6. Чтобы балансировать запрос по доменному имени, создайте условие в HTTP-политике для проверки домена:

       ```bash
       openstack loadbalancer l7rule create \
         --compare-type EQUAL_TO \
         --type HOST_NAME \
         --value <domain_name> \
         <policy>
       ```

       Укажите:

       * `<domain_name>` — домен вида `example.com`;
       * `<policy>` — ID или имя L7-политики. Список можно посмотреть с помощью команды `openstack loadbalancer l7policy list`.

    7. Чтобы балансировать запрос по пути, создайте условие в HTTP-политике для проверки пути:

       ```bash
       openstack loadbalancer l7rule create \
         --compare-type STARTS_WITH \
         --type PATH \
         --value <path> \
         <policy>
       ```

       Укажите:

       * `<path>` — текст, с которого должен начинаться путь запроса, например `/api`;
       * `<policy>` — ID или имя L7-политики. Список можно посмотреть с помощью команды `openstack loadbalancer l7policy list`.
  </TabItem>
</Tabs>

<Formbricks />
