---
title: 'Настроить балансировку нагрузки по протоколу HTTP для серверов за межсетевым экраном FortiGate'
sidebar_label: 'Настроить балансировку нагрузки'
sidebar_position: 2
description: 'Как настроить балансировку нагрузки по протоколу HTTP для серверов за межсетевым экраном FortiGate' 
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import {TabItemLabel} from '@selectel/docux/components'
import PlusIcon from '@selectel/docux/icons/plus'

# Настроить балансировку нагрузки по протоколу HTTP для серверов за межсетевым экраном FortiGate

:::info

Это инструкция с примером настройки балансировки HTTP-трафика между серверами за межсетевым экраном.

:::

:::info

Инструкция актуальна для версий FortiOS 6.x и 7.x.
Если у вас другая версия FortiOS, вы можете найти инструкции в официальной документации [FortiGate](https://docs.fortinet.com).

:::

1. Если вы еще не связали FortiGate с серверами, [свяжите межсетевой экран FortiGate с серверами в инфраструктуре Selectel](#create-network-fortigate-to-servers).
2. [Создайте проверку доступности](#create-health-check).
3. [Создайте виртуальный сервер](#create-virtual-server).
4. [Создайте политику безопасности](#create-security-policy).
5. [Проверьте работу балансировки](#check-load-balancer).

## 1. Связать межсетевой экран FortiGate с серверами в инфраструктуре Selectel \{#create-network-fortigate-to-servers}

Используйте инструкцию [Связать продукты и услуги через глобальный роутер](/global-router/create-network/create-global-router-network.mdx).

## 2. Создать проверку доступности \{#create-health-check}

Проверка доступности (Health Check) определяет работоспособность сервера за межсетевым экраном по настроенным параметрам.
Если сервер за межсетевым экраном перестает отвечать, FortiGate перенаправит запросы на доступные серверы.

<Tabs queryString="create-health-check">
  <TabItem value="graphic">
    <TabItemLabel>
      Графический интерфейс
    </TabItemLabel>

    1. [Подключитесь к межсетевому экрану](/firewalls/fortigate/connect-to-firewall.mdx).
    2. Убедитесь, что в разделе **System** → **Feature Visibility** включен тумблер **Load Balance**. Если тумблер выключен, разделы с настройками балансировки не будут отображаться.
    3. Перейдите в раздел **Policy & Objects** → **Health Check**.
    4. Нажмите **Create New**.
    5. В поле **Name** введите имя проверки доступности.
    6. В поле **Type** выберите протокол проверки доступности **HTTP**.
    7. В поле **Interval** введите частоту проверок сервера за межсетевым экраном в секундах или оставьте значение по умолчанию.
    8. В поле **Timeout** введите максимальное время ожидания ответа от сервера за межсетевым экраном в секундах или оставьте значение по умолчанию.
    9. В поле **Retry** введите количество неудачных проверок доступности, после которых сервер за межсетевым экраном будет исключен из балансировки, или оставьте значение по умолчанию.
    10. В поле **Port** введите порт для проверки доступности сервера за межсетевым экраном. По умолчанию это порт 80.
    11. В поле **URL** введите путь к файлу на сервере за межсетевым экраном, куда FortiGate будет отправлять GET-запрос для проверки доступности сервера за межсетевым экраном. Например, `/health.html`.
    12. В поле **Matched content** введите текст, который FortiGate будет искать в теле ответа на GET-запрос. Например, `OK`.
    13. Нажмите **OK**.
  </TabItem>

  <TabItem value="cli">
    <TabItemLabel>
      CLI
    </TabItemLabel>

    1. [Подключитесь к межсетевому экрану](/firewalls/fortigate/connect-to-firewall.mdx).
    2. Создайте проверку доступности:

       ```bash
       config firewall ldb-monitor
           edit <health_check_name>
               set type http
               set port <health_check_port>
               set http-get "<url>"
               set http-match "<text>"
               set interval <interval>
               set timeout <timeout>
               set retry <retry>
           next
       end
       ```

       Укажите:

       * `<health_check_name>` — имя проверки доступности;
       * `<health_check_port>` — порт для проверки доступности сервера за межсетевым экраном. По умолчанию это порт 80;
       * `<url>` — путь к файлу на сервере за межсетевым экраном, куда FortiGate будет отправлять GET-запрос для проверки доступности сервера за межсетевым экраном. Например, `/health.html`;
       * `<text>` — текст, который FortiGate будет искать в теле ответа на GET-запрос. Например, `OK`;
       * `<interval>` — частота проверок сервера за межсетевым экраном в секундах;
       * `<timeout>` — максимальное время ожидания ответа от сервера за межсетевым экраном в секундах;
       * `<retry>` — количество неудачных проверок доступности, после которых сервер за межсетевым экраном будет исключен из балансировки.
  </TabItem>
</Tabs>

## 3. Создать виртуальный сервер \{#create-virtual-server}

Виртуальный сервер (Virtual Server) принимает входящий трафик и перенаправляет его на реальные серверы (Real Server) — IP-адрес и порт сервера за межсетевым экраном.
Вы можете добавить несколько реальных серверов, чтобы FortiGate автоматически распределял нагрузку между ними.

<Tabs queryString="create-virtual-server">
  <TabItem value="graphic">
    <TabItemLabel>
      Графический интерфейс
    </TabItemLabel>

    1. [Подключитесь к межсетевому экрану](/firewalls/fortigate/connect-to-firewall.mdx).

    2. Перейдите в раздел **Policy & Objects** → **Virtual Servers**.

    3. Нажмите **Create New**.

    4. В поле **Name** введите имя виртуального сервера.

    5. В поле **Type** выберите протокол **HTTP**.

    6. В поле **Interface** выберите, через какой интерфейс межсетевого экрана будут поступать запросы на виртуальный сервер:

       * чтобы запросы поступали только через один интерфейс, выберите этот интерфейс. Например, **wan1**;
       * чтобы запросы поступали через все интерфейсы, выберите **any**.

    7. В поле **Virtual Server IP** введите публичный IP-адрес межсетевого экрана, который вы получили в тикете после [заказа межсетевого экрана](/firewalls/order/order-hardware-firewall.mdx).

    8. В поле **Virtual Server Port** введите порт на межсетевом экране, на который будут поступать входящие запросы.

    9. В поле **Load Balancing Method** выберите [метод балансировки нагрузки](/firewalls/fortigate/load-balancing/about-load-balancing.mdx#load-balancing-methods).

    10. Опционально: чтобы все запросы одного пользователя в рамках сессии обрабатывались одним сервером за межсетевым экраном, в поле **Persistence** выберите **HTTP Cookie**. Подробнее о сохранении сессии в подразделе [Сохранение сессии](/firewalls/fortigate/load-balancing/about-load-balancing.mdx#session-persistence) инструкции [Протоколы и методы балансировки нагрузки](/firewalls/fortigate/load-balancing/about-load-balancing.mdx).

    11. В поле **Health Check** выберите проверку доступности, которую вы [создали на этапе 2](#create-health-check).

    12. Опционально: чтобы использовать одно TCP-соединение с сервером за межсетевым экраном при обработке нескольких HTTP-запросов, включите тумблер **HTTP Multiplexing**.

    13. Опционально: чтобы сохранять IP-адрес пользователя в HTTP-заголовке `X-Forwarded-For`, включите тумблер **Preserve Client IP**.

    14. В блоке **Real Servers** нажмите **Create New**.

    15. В поле **IP Address** введите приватный IP-адрес сервера за межсетевым экраном.

    16. В поле **Port** введите порт сервера за межсетевым экраном, на который будут перенаправляться запросы. По умолчанию это порт 80.

    17. Нажмите **OK**.

    18. Повторите шаги 14–17 для каждого сервера за межсетевым экраном, который нужно добавить в балансировку.

    19. Нажмите **OK**.
  </TabItem>

  <TabItem value="cli">
    <TabItemLabel>
      CLI
    </TabItemLabel>

    1. [Подключитесь к межсетевому экрану](/firewalls/fortigate/connect-to-firewall.mdx).
    2. Создайте Virtual Server:

       ```bash
       config firewall vip
          edit "<virtual_server_name>"
             set type server-load-balance
             set ldb-method <load_balancing_method>
             set extip <public_ip_address>
             set extintf "<eth_name>"
             set server-type http
             set extport <public_port>
             set monitor "<health_check_name>"
             config realservers
                edit 1
                   set ip <real_server_ip_1>
                   set port <real_server_port_1>
                next
                edit 2
                   set ip <real_server_ip_2>
                   set port <real_server_port_2>
                next
             end
          next
       end
       ```

       Укажите:

       * `<virtual_server_name>` — имя виртуального сервера;

       * `<load_balancing_method>` — [метод балансировки нагрузки](/firewalls/fortigate/load-balancing/about-load-balancing.mdx#load-balancing-methods):

         * `static` — Static;
         * `round-robin` — Round Robin;
         * `weighted` — Weighted;
         * `least-session` — Least Session;
         * `least-rtt` — Least RTT;
         * `first-alive` — First Alive;
         * `http-host` — HTTP Host;

       * `<public_ip_address>` — публичный IP-адрес межсетевого экрана, который вы получили в тикете после [заказа межсетевого экрана](/firewalls/order/order-hardware-firewall.mdx);

       * `<eth_name>` — имя интерфейса межсетевого экрана, чтобы запросы поступали только через этот интерфейс. Список интерфейсов можно посмотреть с помощью команды `show system interface`. Чтобы запросы поступали через все интерфейсы, укажите `any`;

       * `<public_port>` — порт на межсетевом экране, на который будут поступать входящие запросы;

       * `<health_check_name>` — имя проверки доступности, которую вы [создали на этапе 2](#create-health-check);

       * опционально: `set persistence http-cookie` — включает сохранение сессии, все запросы одного пользователя в рамках сессии будут обрабатываться одним сервером за межсетевым экраном. Подробнее о сохранении сессии в подразделе [Сохранение сессии](/firewalls/fortigate/load-balancing/about-load-balancing.mdx#session-persistence) инструкции [Протоколы и методы балансировки нагрузки](/firewalls/fortigate/load-balancing/about-load-balancing.mdx). По умолчанию функция отключена;

       * опционально: `set http-multiplex enable` — включает использование одного TCP-соединения с сервером за межсетевым экраном при обработке нескольких HTTP-запросов. По умолчанию функция отключена;

       * опционально: `set http-ip-header enable` — включает сохранение IP-адреса пользователя в HTTP-заголовке `X-Forwarded-For`. По умолчанию функция отключена;

       * `<real_server_ip_1>`, `<real_server_ip_2>` — приватные IP-адреса серверов за межсетевым экраном;

       * `<real_server_port_1>`, `<real_server_port_2>` — порты серверов за межсетевым экраном, на которые будут перенаправляться запросы. По умолчанию это порт 80.

       Если вам нужно добавить больше реальных серверов, укажите их в блоке кода `config realservers` в одной команде с новой строки. Например:

       ```bash
       config realservers
          edit 1
             set ip <real_server_ip_1>
             set port <real_server_port_1>
          next
          edit 2
             set ip <real_server_ip_2>
             set port <real_server_port_2>
          next
          edit 3
             set ip <real_server_ip_3>
             set port <real_server_port_3>
          next
       end
       ```
  </TabItem>
</Tabs>

## 4. Создать политику безопасности \{#create-security-policy}

Политика безопасности определяет, какой трафик межсетевой экран будет пропускать между своими интерфейсами.
Например, с помощью политики можно разрешить прохождение HTTP-трафика к виртуальному серверу.
Если политики безопасности не созданы, весь трафик отбрасывается.

<Tabs queryString="create-security-policy">
  <TabItem value="graphic">
    <TabItemLabel>
      Графический интерфейс
    </TabItemLabel>

    <Tabs queryString="firmware-version">
      <TabItem value="fortios-6">
        <TabItemLabel>
          FortiOS 6.x
        </TabItemLabel>

        1. [Подключитесь к межсетевому экрану](/firewalls/fortigate/connect-to-firewall.mdx).
        2. Перейдите в раздел **Policy & Objects** → **IPv4 Policy**.
        3. Нажмите **Create New**.
        4. В поле **Name** введите имя политики безопасности.
        5. В поле **Incoming Interface** выберите публичный интерфейс межсетевого экрана.
        6. В поле **Outgoing Interface** выберите приватный интерфейс межсетевого экрана.
        7. В поле **Source** выберите **all**.
        8. В поле **Destination** выберите виртуальный сервер, который вы [создали на этапе 3](#create-virtual-server).
        9. В поле **Schedule** выберите **always**.
        10. В поле **Service** выберите **HTTP**.
        11. В поле **Action** выберите **Accept**.
        12. В поле **Inspection Mode** выберите **Proxy-based**.
        13. Выключите тумблер **NAT**. Серверы за межсетевым экраном будут получать исходные IP-адреса подключений.
        14. Нажмите **OK**.
      </TabItem>

      <TabItem value="fortios-7">
        <TabItemLabel>
          FortiOS 7.x
        </TabItemLabel>

        1. [Подключитесь к межсетевому экрану](/firewalls/fortigate/connect-to-firewall.mdx).
        2. Перейдите в раздел **Policy & Objects** → **Firewall Policy**.
        3. Нажмите **Create New**.
        4. В поле **Name** введите имя политики безопасности.
        5. В поле **Incoming Interface** выберите публичный интерфейс межсетевого экрана.
        6. В поле **Outgoing Interface** выберите приватный интерфейс межсетевого экрана.
        7. В поле **Source** выберите **all**.
        8. В поле **Destination** выберите виртуальный сервер, который вы [создали на этапе 3](#create-virtual-server).
        9. В поле **Schedule** выберите **always**.
        10. В поле **Service** выберите **HTTP**.
        11. В поле **Action** выберите **Accept**.
        12. В поле **Inspection Mode** выберите **Proxy-based**.
        13. Выключите тумблер **NAT**. Серверы за межсетевым экраном будут получать исходные IP-адреса подключений.
        14. Нажмите **OK**.
      </TabItem>
    </Tabs>
  </TabItem>

  <TabItem value="cli">
    <TabItemLabel>
      CLI
    </TabItemLabel>

    1. [Подключитесь к межсетевому экрану](/firewalls/fortigate/connect-to-firewall.mdx).

    2. Посмотрите занятые номера политик безопасности, для этого выведите информацию о настроенных политиках безопасности:

       ```bash
       show firewall policy
       ```

       В ответе появится информация о настроенных политиках безопасности. Например:

       ```bash
       config firewall policy
           edit 1
              set name "my_policy"
              set srcintf "lan"
              set dstintf "wan1"
              set action accept
              set srcaddr "all"
              set dstaddr "all"
              set schedule "always"
              set service "ALL"
              set nat disable
           next
       end
       ```

       Здесь `1` — номер политики безопасности.

    3. Создайте политику безопасности:

       ```bash
        config firewall policy
            edit <policy_number>
               set name "<policy_name>"
               set inspection-mode proxy 
               set srcintf "<incoming_interface>"
               set dstintf "<outgoing_interface>"
               set srcaddr "all"
               set dstaddr "<virtual_server_name>"
               set action accept
               set schedule "always"
               set service "HTTP"
               set nat disable
            next
        end
       ```

       Укажите:

       * `<policy_number>` — свободный номер политики безопасности;
       * `<policy_name>` — имя политики безопасности;
       * `<incoming_interface>` — имя публичного интерфейса межсетевого экрана. Список интерфейсов можно посмотреть с помощью команды `show system interface`;
       * `<outgoing_interface>` — имя приватного интерфейса межсетевого экрана. Список интерфейсов можно посмотреть с помощью команды `show system interface`;
       * `<virtual_server_name>` — имя виртуального сервера, который вы [создали на этапе 3](#create-virtual-server).
  </TabItem>
</Tabs>

## 5. Проверить работу балансировки \{#check-load-balancer}

<Tabs queryString="check-load-balancer">
  <TabItem value="graphic">
    <TabItemLabel>
      Графический интерфейс
    </TabItemLabel>

    <Tabs queryString="firmware-ver">
      <TabItem value="fortios-6">
        <TabItemLabel>
          FortiOS 6.x
        </TabItemLabel>

        1. [Подключитесь к межсетевому экрану](/firewalls/fortigate/connect-to-firewall.mdx).
        2. Перейдите в раздел **Monitor** → **Load Balance Monitor**.
        3. В столбце **Real Server** напротив IP-адреса реального сервера нажмите <PlusIcon />.
        4. В столбце **Status** проверьте состояние серверов:

           * `Up` — сервер активен, FortiGate направляет на него запросы;
           * `Down` — сервер не отвечает, FortiGate не направляет на него запросы.
      </TabItem>

      <TabItem value="fortios-7">
        <TabItemLabel>
          FortiOS 7.x
        </TabItemLabel>

        1. [Подключитесь к межсетевому экрану](/firewalls/fortigate/connect-to-firewall.mdx).
        2. Перейдите в раздел **Dashboard** → **Status**.
        3. Нажмите **Add Widget** и выберите **Load Balance**.
        4. Нажмите **Add Widget**.
        5. На странице с дашбордами нажмите **Load Balance**.
        6. В столбце **Real Server** напротив IP-адреса реального сервера нажмите <PlusIcon />.
        7. В столбце **Status** проверьте состояние серверов:

           * `Up` — сервер активен, FortiGate направляет на него запросы;
           * `Down` — сервер не отвечает, FortiGate не направляет на него запросы.
      </TabItem>
    </Tabs>
  </TabItem>

  <TabItem value="cli">
    <TabItemLabel>
      CLI
    </TabItemLabel>

    1. [Подключитесь к межсетевому экрану](/firewalls/fortigate/connect-to-firewall.mdx).

    2. Проверьте состояние реальных серверов:

       ```bash
       diagnose firewall vip realserver list
       ```

       В выводе появится информация о реальных серверах. Например:

       ```bash
       vf=0 name=http_virtual_server/3 class=4 type=1 172.20.120.122:(3080-3080), protocol=6
       total=2 alive=1 power=0 ptr=50980085
       ip=192.168.101.2-192.168.101.2/80 adm_status=0 holddown_interval=300 max_connections=0 weight=1 option=01
       alive=1 total=1 enable=00000001 alive=00000001 power=0
       src_sz=0
       id=1 status=up ks=5 us=4 events=1 bytes=28540 rtt=12
       ip=192.168.101.3-192.168.101.3/80 adm_status=1 holddown_interval=300 max_connections=0 weight=1 option=01
       alive=0 total=1 enable=00000000 alive=00000000 power=0
       src_sz=0
       id=0 status=down ks=4 us=3 events=1 bytes=21380 rtt=8
       ```

       Здесь параметр `status` отображает текущее состояние реального сервера:

       * `status=up` — сервер активен, FortiGate направляет на него запросы;
       * `status=down` — сервер не отвечает, FortiGate не направляет на него запросы.

    3. Проверьте распределение трафика между реальными серверами:

       ```bash
       diagnose sniffer packet <interface_name> '<filter>' <verbose>
       ```

       Укажите:

       * `<interface_name>` — имя интерфейса межсетевого экрана, через который трафик поступает на серверы. Например, `wan1`;
       * `<filter>` — фильтр для вывода пакетов. Например, `port 80`;
       * `<verbose>` — уровень детализации вывода от `1` до `6`. Чем больше значение, тем больше информации отображается.
  </TabItem>
</Tabs>

<Formbricks />
