Haproxy

Материал из sysadm
Перейти к навигации Перейти к поиску


Конфигурация

Основной файл конфигурации /etc/haproxy.conf состоит из разделов конфигурации различных типов. Все типы разделов конфигурации кроме global могут определяться многократно.

global
  # раздел конфигурации на уровне процесса процесса

defaults
  # раздел настроек по умолчанию

frontend <имя раздела>
  # раздел конфигурации для подключения пользователей
  # здесь также можно указывать условия по которым запросы будут направляться в нужный backend

backend <имя раздела>
  # раздел конфигурации, определяющий на какой сервер перенаправлять запрос
  # здесь также может определяться механизм распределения нагрузки

frontend

  # принимать подключения на всех адресах, порт 80/tcp
  bind :80

  # определение списка доступа ACL с именем images_url
  #   -i (insensitive) не чувствительность к регистру
  #   path (сравнение по URL)
  #   -m (match) определяет условие соответствия
  #    beg /images/ /photos/ (начинается на /images/ или /photos/)
  acl images_url path -i -m beg /images/ /photos/

  # условный выбор бэкенда
  use_backend     back_static if images_url
  default_backend back_app

backend

В разделе типа backend определяется куда направляется запрос.

Пример распределения по roundrobin

backend back_app
    balance roundrobin
    server  srv1 192.168.0.1 check
    server  srv2 192.168.0.2 check

Примеры других распределений

balance url_param userid
balance url_param session_id check_post 64
balance hdr(User-Agent)
balance hdr(host)
balance hdr(Host) use_domain_only
balance hash req.cookie(clientid)
balance hash var(req.client_id)
balance hash req.hdr_ip(x-forwarded-for,-1),ipmask(24)

IP клиента

  • Haproxy перенаправляет запрос клиента со своего IP адреса.
  • Для http протокола, информация об IP клиента может передаваться через http заголовок, поле x-forwarded-for.
    • Каждый пересылающий (проксирующий) сервер должен добавлять в поле x-forwarder-for свой IP адрес, так формируется цепочка пересылки.
    • Если входящий запрос не содержит поле x-forwarder-for, будет ли haproxy добавлять в качестве исходного IP адрес с которого пришел запрос?
    • Клиент может указать в запросе любой IP в поле x-forwarded-for и обмануть таким образом фильтры, использующие данное поле для определения IP клиента.
  • Для http протокола, информация об IP клиента также может быть передана через поле Forwarded
  • Для других протоколов haproxy может использовать proxy protocol.