Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Frontend и Bind
frontend_bind

Frontend и Bind

Слушатели, протоколы HTTP/TCP, SSL termination на уровне frontend

Frontend и Bind HAProxy

Секция frontend определяет как HAProxy принимает входящие соединения: IP, порт, SSL, маршрутизация.

#Базовая структура frontend

frontend http_front bind *:80 default_backend web_servers

Минимальная конфигурация:

  • bind *:80 — слушать порт 80 на всех интерфейсах
  • default_backend web_servers — направлять все запросы на этот backend

#Директива bind

#Базовое использование

# Все интерфейсы, порт 80 bind *:80 # Конкретный IP bind 192.168.1.10:80 # Несколько портов bind *:80,*:443 # Unix socket bind /var/run/haproxy.sock

#SSL bind

# SSL с одним сертификатом bind *:443 ssl crt /etc/haproxy/certs/site.pem # SSL с несколькими сертификатами (SNI) bind *:443 ssl crt /etc/haproxy/certs/ # SSL с параметрами bind *:443 ssl crt /etc/haproxy/certs/site.pem \ alpn h2,http/1.1 \ ssl-min-ver TLSv1.2 \ no-tls-tickets

Параметры:

  • ssl — включает SSL termination
  • crt — путь к сертификату (PEM) или директории
  • alpn — протоколы (h2 = HTTP/2)
  • ssl-min-ver — минимальная версия TLS
  • no-tls-tickets — отключает session tickets

#PROXY Protocol

# Приём PROXY protocol от другого балансировщика bind *:80 accept-proxy # PROXY protocol v2 bind *:80 accept-proxy protocol v2

Когда используется:

  • HAProxy за AWS ELB / Cloudflare
  • Цепочка балансировщиков (L4 → L7)
  • Сохранение реального IP клиента

Пример:

# Frontend принимает PROXY protocol frontend http_front bind *:80 accept-proxy default_backend web_servers

#Multiple Frontends

#Разделение по портам

frontend http_front bind *:80 default_backend web_servers frontend https_front bind *:443 ssl crt /etc/haproxy/certs/site.pem default_backend web_servers

#Разделение по IP

frontend api_front bind 192.168.1.10:80 default_backend api_servers frontend web_front bind 192.168.1.11:80 default_backend web_servers

#HTTP/2 Support

#HTTP/2 поверх TLS (h2)

frontend h2_front bind *:443 ssl crt /etc/haproxy/certs/site.pem alpn h2,http/1.1 default_backend web_servers

Преимущества HTTP/2:

  • Multiplexing (несколько запросов в одном соединении)
  • Header compression (HPACK)
  • Server push
  • Приоритизация запросов

#HTTP/2 без TLS (h2c)

frontend h2c_front bind *:8080 alpn h2c,http/1.1 default_backend web_servers

Важно: Большинство браузеров требуют TLS для HTTP/2.

#Redirects

#HTTP → HTTPS redirect

frontend http_front bind *:80 redirect scheme https code 301 if !{ ssl_fc }

Параметры:

  • scheme https — меняет http:// на https://
  • code 301 — постоянное перенаправление (SEO friendly)
  • if !{ ssl_fc } — только если не SSL

#Redirect с изменением path

frontend old_api bind *:80 redirect prefix /api/v2 code 301 if { path_beg /api/v1 }

Пример:

GET /api/v1/users → 301 → /api/v2/api/v1/users

Правильно (с regexp):

frontend old_api bind *:80 http-request redirect location /api/v2%[path] if { path_beg /api/v1 }

#Custom Error Pages

frontend http_front bind *:80 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

Формат errorfile:

HTTP/1.1 503 Service Unavailable Content-Type: text/html Connection: close Retry-After: 10 <html> <body> <h1>Service Unavailable</h1> <p>Please try again later.</p> </body> </html>

#Rate Limiting на уровне Frontend

frontend http_front bind *:80 # Stick table для rate limiting stick-table type ip size 100k expire 30s store http_req_rate(10s) # Трекаем IP клиента http-request track-sc0 src # Deny если больше 100 запросов за 10 секунд http-request deny deny_status 429 if { sc_http_req_rate(0) gt 100 } default_backend web_servers

Параметры stick-table:

  • type ip — ключ по IP
  • size 100k — 100,000 записей
  • expire 30s — запись истекает через 30s
  • store http_req_rate(10s) — счётчик запросов за 10s

#Access Control

#Блокировка по IP

frontend http_front bind *:80 # Блокировка диапазона http-request deny if { src 10.0.0.0/8 } # Блокировка по списку acl blocked_ips src -f /etc/haproxy/blocked_ips.txt http-request deny if blocked_ips default_backend web_servers

Формат blocked_ips.txt:

192.168.1.100
10.0.0.0/8
172.16.0.0/12

#Блокировка по User-Agent

frontend http_front bind *:80 # Блокировка сканеров acl bad_bot hdr_sub(User-Agent) -i scanner http-request deny if bad_bot # Блокировка curl/wget acl cli_tool hdr_sub(User-Agent) -i curl wget http-request deny if cli_tool default_backend web_servers

#Connection Limits

#Ограничение соединений с IP

frontend http_front bind *:80 stick-table type ip size 100k expire 30s store conn_cur http-request track-sc0 src http-request deny if { sc_conn_cur(0) gt 10 } default_backend web_servers

Защита от:

  • Один клиент открывает сотни соединений
  • DDoS атаки на уровне соединений

#Глобальный лимит на frontend

frontend http_front bind *:80 maxconn 10000 default_backend web_servers

Когда использовать:

  • Защита от перегрузки всего frontend
  • Ограничение по лицензионным требованиям

#Logging на уровне Frontend

frontend http_front bind *:80 # Кастомный формат лога log-format "%ci:%cp [%tr] %ft %b/%s %TR/%Tw/%Tc/%Tr/%Ta %ST %B %CC %CS %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %hr %hs %{+Q}r" # Логирование только ошибок option dontlog-normal default_backend web_servers

#Full Frontend Example

frontend https_front # Bind с SSL bind *:443 ssl crt /etc/haproxy/certs/site.pem alpn h2,http/1.1 # HTTP/2 only (опционально) # http2 # Rate limiting stick-table type ip size 100k expire 30s store http_req_rate(10s) http-request track-sc0 src http-request deny deny_status 429 if { sc_http_req_rate(0) gt 100 } # Access control acl blocked_ips src -f /etc/haproxy/blocked_ips.txt http-request deny if blocked_ips # Security headers http-response set-header Strict-Transport-Security "max-age=31536000; includeSubDomains" http-response set-header X-Frame-Options "SAMEORIGIN" http-response set-header X-Content-Type-Options "nosniff" # Logging option httplog log-format "%ci:%cp [%tr] %ft %b/%s %TR/%Tw/%Tc/%Tr/%Ta %ST %B %CC %CS %tsc %ac/%fc/%bc/%sc/%rc %sq/%bq %hr %hs %{+Q}r" # Default backend default_backend web_servers

Далее: Backend и серверы