Haproxy
Перейти к навигации
Перейти к поиску
Конфигурация
Основной файл конфигурации /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.