Описание конфигурационного файла HAProxy — haproxy.cfg

Материал из support.qbpro.ru

HAProxy - Высокопроизводительный прокси/балансировщик для TCP соединений, с поддержкой протокола HTTP.

Конфигурирование HAProxy состоит из 3 основных частей:

Аргументы из командной строки, которые всегда имеют приоритет

  • «global» раздел конфигурационного файла, который устанавливает параметры для всего процесса

И разделов настройки проксирования в конфигурационном файле, "defaults", "listen", "frontend" and "backend"

  • "defaults" раздел определяет параметры по умолчанию для всех остальных разделов и являеться обизательным.
  • "frontend" раздел описывает набор интерфейсов для принятия соединений от клиентов(браузеров).
  • "backend" раздел описывает набор серверов, к которым будет подключаться прокси

для переадресации входящих соединений.

  • "listen" раздел описывает полный прокси с его внешним и внутренним

части объединенными в одном разделе(обедененое описание "frontend" и "backend" ). Как правило, полезна только для TCP трафикa.


Полный пример конфигурационного файла:

 global
 log 127.0.0.1   local0 notice
 #stats socket /tmp/stats
 maxconn 10000
 #chroot /usr/share/haproxy
 #nbproc 2
 user haproxy
 group haproxy
 daemon
 #debug
 #quiet

 defaultsglobal
 log 127.0.0.1   local0 notice
 #stats socket /tmp/stats
 maxconn 10000
 #chroot /usr/share/haproxy
 #nbproc 2
 user haproxy
 group haproxy
 daemon
 #debug
 #quiet

 defaults
 log     global
 mode    http
 option  httplog
 option  dontlognull
 retries 3
 option redispatch
 option httpclose
 option forwardfor
 maxconn 10000
 contimeout      5000
 clitimeout      50000
 srvtimeout      50000
 errorfile       400     /etc/haproxy/errors/400.http
 errorfile       403     /etc/haproxy/errors/403.http
 errorfile       408     /etc/haproxy/errors/408.http
 errorfile       500     /etc/haproxy/errors/500.http
 errorfile       502     /etc/haproxy/errors/502.http
 errorfile       503     /etc/haproxy/errors/503.http
 errorfile       504     /etc/haproxy/errors/504.http

 frontend http
 bind *:80
 acl is_site1 hdr_dom(host) -i site1
 acl is_site2 hdr_dom(host) -i site2
 acl is_site3 hdr_dom(host) -i site3
 acl is_cdn hdr_dom(host) -i cdn
 acl is_cdnt hdr_dom(host) -i cdnt
 acl is_site4 hdr_dom(host) -i site4
 use_backend site1_cluster1 if is_site1
 use_backend site2_cluster1 if is_site2
 use_backend site3_cluster1 if is_site3
 use_backend cdn_cluster1 if is_cdn
 use_backend cdnt_cluster1 if is_cdnt
 use_backend site4_cluster1 if is_site4

 backend site1_cluster1
 balance roundrobin
 option httpchk HEAD /show.fcgi?show=stat HTTP/1.1\r\nHost:site1.my.com
 stats enable
 fullconn 200
 server srv-1.2.my.com 21.18.21.4:80 cookie site112ha check  inter 2000 fall 3 minconn 30 maxconn 70 weight 1
 server srv-1.3.my.com 21.86.21.20:80 cookie site113ha check inter 2000 fall 3 minconn 30 maxconn 70 weight 100
 server srv-3.2.my.com 21.18.21.6:81 cookie site132ha check inter 2000 fall 3 backup
 server srv-3.3.my.com 21.86.21.02:81 cookie site133ha check inter 2000 fall 3 backup

 backend site4_cluster1
 balance roundrobin
 appsession site4ha len 64 timeout 3h prefix
 cookie site4ha insert indirect nocache
 option httpchk HEAD / HTTP/1.1\r\nHost:site4.my.com
 stats enable
 server srv-1.2.my.com 21.18.21.4:80 cookie site412ha check  inter 2000 fall 3
 server srv-1.3.my.com 21.86.21.20:80 cookie site413ha check inter 2000 fall 3

 backend site2_cluster1
 balance roundrobin
 appsession site2ha len 64 timeout 3h prefix
 cookie site2ha insert indirect nocache
 option httpchk HEAD / HTTP/1.1\r\nHost:site2.my.com
 stats enable
 server srv-1.2.my.com 21.18.21.4:80 cookie site212ha check  inter 2000 fall 3
 server srv-1.3.my.com 21.86.21.20:80 cookie site213ha check inter 2000 fall 3

 backend site3_cluster1
 balance roundrobin
 option httpchk HEAD / HTTP/1.1\r\nHost:site3.my.com
 stats enable
 cookie site3ha insert indirect nocache
 server srv-1.2.my.com 21.18.21.4:80 cookie site312ha check  inter 2000 fall 3 weight 1
 server srv-1.3.my.com 21.86.21.20:80 cookie site313ha check inter 2000 fall 3 weight 100

 backend cdn_cluster1
 balance leastconn
 option httpchk HEAD / HTTP/1.1\r\nHost:cdn.my.com
 stats enable
 server srv-3.2.my.com 21.18.21.6:81 check  inter 2000 fall 3 weight 1
 server srv-3.3.my.com 21.86.21.02:81 check inter 2000 fall 3 weight 100

 backend cdnt_cluster1
 balance leastconn
 option httpchk HEAD / HTTP/1.1\r\nHost:cdnt.my.com
 stats enable
 server srv-3.2.my.com 21.18.21.6:81 check  inter 2000 fall 3 weight 1
 server srv-3.3.my.com 21.86.21.02:81 check inter 2000 fall 3 weight 100

 listen stats-srv-3.my.com *:8180
 stats uri /stats
 stats realm   Haproxy\ Statistics
 stats show-legends
 stats refresh 5s
 maxconn 300
 mode http
 option httpclose
 transparent
 stats auth test:test
 clitimeout  10000
 srvtimeout  10000
 contimeout  4000
 log     global
 mode    http
 option  httplog
 option  dontlognull
 retries 3
 option redispatch
 option httpclose
 option forwardforglobal
 log 127.0.0.1   local0 notice
 #stats socket /tmp/stats
 maxconn 10000
 #chroot /usr/share/haproxy
 #nbproc 2
 user haproxy
 group haproxy
 daemon
 #debug
 #quiet

 defaults
 log     global
 mode    http
 option  httplog
 option  dontlognull
 retries 3
 option redispatch
 option httpclose
 option forwardfor
 maxconn 10000
 contimeout      5000
 clitimeout      50000
 srvtimeout      50000
 errorfile       400     /etc/haproxy/errors/400.http
 errorfile       403     /etc/haproxy/errors/403.http
 errorfile       408     /etc/haproxy/errors/408.http
 errorfile       500     /etc/haproxy/errors/500.http
 errorfile       502     /etc/haproxy/errors/502.http
 errorfile       503     /etc/haproxy/errors/503.http
 errorfile       504     /etc/haproxy/errors/504.http

 frontend http
 bind *:80
 acl is_site1 hdr_dom(host) -i site1
 acl is_site2 hdr_dom(host) -i site2
 acl is_site3 hdr_dom(host) -i site3
 acl is_cdn hdr_dom(host) -i cdn
 acl is_cdnt hdr_dom(host) -i cdnt
 acl is_site4 hdr_dom(host) -i site4
 use_backend site1_cluster1 if is_site1
 use_backend site2_cluster1 if is_site2
 use_backend site3_cluster1 if is_site3
 use_backend cdn_cluster1 if is_cdn
 use_backend cdnt_cluster1 if is_cdnt
 use_backend site4_cluster1 if is_site4

 backend site1_cluster1
 balance roundrobin
 option httpchk HEAD /show.fcgi?show=stat HTTP/1.1\r\nHost:site1.my.com
 stats enable
 fullconn 200
 server srv-1.2.my.com 21.18.21.4:80 cookie site112ha check  inter 2000 fall 3 minconn 30 maxconn 70 weight 1
 server srv-1.3.my.com 21.86.21.20:80 cookie site113ha check inter 2000 fall 3 minconn 30 maxconn 70 weight 100
 server srv-3.2.my.com 21.18.21.6:81 cookie site132ha check inter 2000 fall 3 backup
 server srv-3.3.my.com 21.86.21.02:81 cookie site133ha check inter 2000 fall 3 backup

 backend site4_cluster1
 balance roundrobin
 appsession site4ha len 64 timeout 3h prefix
 cookie site4ha insert indirect nocache
 option httpchk HEAD / HTTP/1.1\r\nHost:site4.my.com
 stats enable
 server srv-1.2.my.com 21.18.21.4:80 cookie site412ha check  inter 2000 fall 3
 server srv-1.3.my.com 21.86.21.20:80 cookie site413ha check inter 2000 fall 3

 backend site2_cluster1
 balance roundrobin
 appsession site2ha len 64 timeout 3h prefix
 cookie site2ha insert indirect nocache
 option httpchk HEAD / HTTP/1.1\r\nHost:site2.my.com
 stats enable
 server srv-1.2.my.com 21.18.21.4:80 cookie site212ha check  inter 2000 fall 3
 server srv-1.3.my.com 21.86.21.20:80 cookie site213ha check inter 2000 fall 3

 backend site3_cluster1
 balance roundrobin
 option httpchk HEAD / HTTP/1.1\r\nHost:site3.my.com
 stats enable
 cookie site3ha insert indirect nocache
 server srv-1.2.my.com 21.18.21.4:80 cookie site312ha check  inter 2000 fall 3 weight 1
 server srv-1.3.my.com 21.86.21.20:80 cookie site313ha check inter 2000 fall 3 weight 100

 backend cdn_cluster1
 balance leastconn
 option httpchk HEAD / HTTP/1.1\r\nHost:cdn.my.com
 stats enable
 server srv-3.2.my.com 21.18.21.6:81 check  inter 2000 fall 3 weight 1
 server srv-3.3.my.com 21.86.21.02:81 check inter 2000 fall 3 weight 100

 backend cdnt_cluster1
 balance leastconn
 option httpchk HEAD / HTTP/1.1\r\nHost:cdnt.my.com
 stats enable
 server srv-3.2.my.com 21.18.21.6:81 check  inter 2000 fall 3 weight 1
 server srv-3.3.my.com 21.86.21.02:81 check inter 2000 fall 3 weight 100

 listen stats-srv-3.my.com *:8180
 stats uri /stats
 stats realm   Haproxy\ Statistics
 stats show-legends
 stats refresh 5s
 maxconn 300
 mode http
 option httpclose
 transparent
 stats auth test:test
 clitimeout  10000
 srvtimeout  10000
 contimeout  4000
 maxconn 10000
 contimeout      5000
 clitimeout      50000
 srvtimeout      50000
 errorfile       400     /etc/haproxy/errors/400.http
 errorfile       403     /etc/haproxy/errors/403.http
 errorfile       408     /etc/haproxy/errors/408.http
 errorfile       500     /etc/haproxy/errors/500.http
 errorfile       502     /etc/haproxy/errors/502.http
 errorfile       503     /etc/haproxy/errors/503.http
 errorfile       504     /etc/haproxy/errors/504.http

 frontend http
 bind *:80
 acl is_site1 hdr_dom(host) -i site1
 acl is_site2 hdr_dom(host) -i site2
 acl is_site3 hdr_dom(host) -i site3
 acl is_cdn hdr_dom(host) -i cdn
 acl is_cdnt hdr_dom(host) -i cdnt
 acl is_site4 hdr_dom(host) -i site4
 use_backend site1_cluster1 if is_site1
 use_backend site2_cluster1 if is_site2
 use_backend site3_cluster1 if is_site3
 use_backend cdn_cluster1 if is_cdn
 use_backend cdnt_cluster1 if is_cdnt
 use_backend site4_cluster1 if is_site4

 backend site1_cluster1
 balance roundrobin
 option httpchk HEAD /show.fcgi?show=stat HTTP/1.1\r\nHost:site1.my.com
 stats enable
 fullconn 200
 server srv-1.2.my.com 21.18.21.4:80 cookie site112ha check  inter 2000 fall 3 minconn 30 maxconn 70 weight 1
 server srv-1.3.my.com 21.86.21.20:80 cookie site113ha check inter 2000 fall 3 minconn 30 maxconn 70 weight 100
 server srv-3.2.my.com 21.18.21.6:81 cookie site132ha check inter 2000 fall 3 backup
 server srv-3.3.my.com 21.86.21.02:81 cookie site133ha check inter 2000 fall 3 backup

 backend site4_cluster1
 balance roundrobin
 appsession site4ha len 64 timeout 3h prefix
 cookie site4ha insert indirect nocache
 option httpchk HEAD / HTTP/1.1\r\nHost:site4.my.com
 stats enable
 server srv-1.2.my.com 21.18.21.4:80 cookie site412ha check  inter 2000 fall 3
 server srv-1.3.my.com 21.86.21.20:80 cookie site413ha check inter 2000 fall 3

 backend site2_cluster1
 balance roundrobin
 appsession site2ha len 64 timeout 3h prefix
 cookie site2ha insert indirect nocache
 option httpchk HEAD / HTTP/1.1\r\nHost:site2.my.com
 stats enable
 server srv-1.2.my.com 21.18.21.4:80 cookie site212ha check  inter 2000 fall 3
 server srv-1.3.my.com 21.86.21.20:80 cookie site213ha check inter 2000 fall 3

 backend site3_cluster1
 balance roundrobin
 option httpchk HEAD / HTTP/1.1\r\nHost:site3.my.com
 stats enable
 cookie site3ha insert indirect nocache
 server srv-1.2.my.com 21.18.21.4:80 cookie site312ha check  inter 2000 fall 3 weight 1
 server srv-1.3.my.com 21.86.21.20:80 cookie site313ha check inter 2000 fall 3 weight 100

 backend cdn_cluster1
 balance leastconn
 option httpchk HEAD / HTTP/1.1\r\nHost:cdn.my.com
 stats enable
 server srv-3.2.my.com 21.18.21.6:81 check  inter 2000 fall 3 weight 1
 server srv-3.3.my.com 21.86.21.02:81 check inter 2000 fall 3 weight 100

 backend cdnt_cluster1
 balance leastconn
 option httpchk HEAD / HTTP/1.1\r\nHost:cdnt.my.com
 stats enable
 server srv-3.2.my.com 21.18.21.6:81 check  inter 2000 fall 3 weight 1
 server srv-3.3.my.com 21.86.21.02:81 check inter 2000 fall 3 weight 100

 listen stats-srv-3.my.com *:8180
 stats uri /stats
 stats realm   Haproxy\ Statistics
 stats show-legends
 stats refresh 5s
 maxconn 300
 mode http
 option httpclose
 transparent
 stats auth test:test
 clitimeout  10000
 srvtimeout  10000
 contimeout  4000 

Рассмотрим раздел конфигурационного файла "global"

 global
 log 127.0.0.1   local0 notice
 #stats socket /tmp/stats
 maxconn 10000
 #chroot /usr/share/haproxy
 #nbproc 2
 user haproxy
 group haproxy
 daemon
 #debug
 #quiet
  • log "address" "facility" [max level [min level]] (log 127.0.0.1 local0 notice) - Добавляет сервер системного журнала.
  • "facility" - должен быть одним из 24 стандартных типов журналирования (kern user mail daemon auth syslog lpr news uucp cron auth2

ftp ntp audit alert cron2 local0 local1 local2 local3 local4 local5 local6 local7)

  • maxconn "number" (maxconn 10000) - Устанавливает максимальное число одновременных подключений для каждого процесса.
  • nbproc "number" (nbproc 2) - задает количество процессов. По умолчанию только один процесс будет создан.
  • daemon - режим работы демоном
  • user - пользователь от которого работает процесс
  • group - группа от которой работает процесс
  • chroot /usr/share/haproxy - окружение процесса
  • stats socket /tmp/stats - путь создания сокета с которого можно читать и запрашивать текущую информацию по работе

Рассмотрим раздел конфигурационного файла "defaults"

 defaults
 log     global
 mode    http
 option  httplog
 option  dontlognull
 retries 3
 option redispatch
 option httpclose
 option forwardfor
 maxconn 10000
 contimeout      5000
 clitimeout      50000
 srvtimeout      50000
 errorfile       400     /etc/haproxy/errors/400.http
 errorfile       403     /etc/haproxy/errors/403.http
 errorfile       408     /etc/haproxy/errors/408.http
 errorfile       500     /etc/haproxy/errors/500.http
 errorfile       502     /etc/haproxy/errors/502.http
 errorfile       503     /etc/haproxy/errors/503.http
 errorfile       504     /etc/haproxy/errors/504.http
  • log global - включает в журналирование информацию о трафике
  • mode http - режим работы HAProxy, в http режиме происходит анализ Layer 7 трафика
  • option httplog - Добавляет в лог HTTP запросы, состояние сеанса и таймеры
  • option dontlognull - не логировать пустые конекшины
  • retries 3 - количество попыток определить состояние бекенда после обрыва соеденения
  • option redispatch - перерастределение запросов после обрыва связи с какимто бекендом
  • option httpclose - закрывать пассивные соеденения
  • option forwardfor - включение X-Forwarded-For для передачи IP клиента бекенду
  • errorfile XXX - определение своих страниц ошибок.

Рассмотрим раздел конфигурационного файла "frontend"

 frontend http
 bind *:80
 acl is_site1 hdr_dom(host) -i site1
 acl is_site2 hdr_dom(host) -i site2
 acl is_site3 hdr_dom(host) -i site3
 acl is_cdn hdr_dom(host) -i cdn
 acl is_cdnt hdr_dom(host) -i cdnt
 acl is_site4 hdr_dom(host) -i site4
 use_backend site1_cluster1 if is_site1
 use_backend site2_cluster1 if is_site2
 use_backend site3_cluster1 if is_site3
 use_backend cdn_cluster1 if is_cdn
 use_backend cdnt_cluster1 if is_cdnt
 use_backend site4_cluster1 if is_site4


  • frontend http - задаем режим работы фронтенда
  • bind *:80 - задает на каком IP и порту будем слушать запросы
  • acl is_site1 hdr_dom(host) -i site1 - создаем политику определения запроса к конкретному сайту. hdr_dom(host) содержит адрес сайта, и если он совпадает(-i) с написаным (site1), то подпадает под политику is_site1
  • use_backend site1_cluster1 if is_site1 - описуем какой бекенд использовать для какой политики

Рассмотрим раздел конфигурационного файла "backend"

 backend site1_cluster1
 balance roundrobin
 option httpchk HEAD /show.fcgi?show=stat HTTP/1.1\r\nHost:site1.my.com
 stats enable
 fullconn 200
 server srv-1.2.my.com 21.18.21.4:80 cookie site112ha check  inter 2000 fall 3 minconn 30 maxconn 70 weight 1
 server srv-1.3.my.com 21.86.21.20:80 cookie site113ha check inter 2000 fall 3 minconn 30 maxconn 70 weight 100
 server srv-3.2.my.com 21.18.21.6:81 cookie site132ha check inter 2000 fall 3 backup
 server srv-3.3.my.com 21.86.21.02:81 cookie site133ha check inter 2000 fall 3 backup

 backend cdn_cluster1
 balance leastconn
 option httpchk HEAD / HTTP/1.1\r\nHost:cdn.my.com
 stats enable
 server srv-3.2.my.com 21.18.21.6:81 check  inter 2000 fall 3 weight 1
 server srv-3.3.my.com 21.86.21.02:81 check inter 2000 fall 3 weight 100


  • backend site1_cluster1 - название бекенда
  • balance (roundrobin/leastconn/static-rr/uri/source/url_param) - настройка алгоритма балансировки.
  • option httpchk HEAD /show.fcgi?show=stat HTTP/1.1\r\nHost:site1.my.com - настройка способа проверки на доступность бекенда
  • server srv-1.3.my.com 21.86.21.20:80 cookie site113ha check inter 2000 fall 3 minconn 30 maxconn 70 weight 100 (backup/disable) - описание сервера. server "Название" "IP:порт" "cookie site113ha - задание кукиса необходимо для правильной балансирови сесий клиентов" "check inter 2000 fall 3 - проверять каждые 2с и после 3 ошибок считать недоступным" "minconn 30 maxconn 70 - организация очереди запросов, чтоб на сервере небыло больше 70 однавременно обрабатываюшихся запросов" "weight 100 - вес сервера от 1 до 100" "backup/disable - использовать в качестве бекапного сервера/отключить сервер"
  • stats enable - включить статистику
  • fullconn 200 - максимальное значение одновременных конектов

Расмотрим раздел конфигурационного файла "listen" в котором реализован доступ к статистике

 listen stats-srv-3.my.com *:8180
 stats uri /stats
 stats realm   Haproxy\ Statistics
 stats show-legends
 stats refresh 5s
 maxconn 300
 mode http
 option httpclose
 transparent
 stats auth test:test
 clitimeout  10000
 srvtimeout  10000
 contimeout  4000
  • listen stats-srv-3.my.com *:8180 - описание IP:порта доступа к статистике
  • stats uri /stats - URL доступа к статистеке
  • stats realm Haproxy\ Statistics - титл странички статистики
  • stats show-legends - отобразать в статистеке дополнительную информацию о параметрах
  • stats refresh 5s - интервал автоматического обнавления странички статистики
  • stats auth test:test - логин и пароль для доступа к статистике

  • Haproxy - пример конфигурации с https