Секция defaults: таймауты, режимы работы, логины по умолчанию
Секция
defaultsзадаёт настройки по умолчанию для всех frontend и backend, уменьшая дублирование конфигурации.
defaults
# Наследование логов
log global
# Режим работы
mode http
# Опции
option httplog
option dontlognull
option forwardfor
# Таймауты
timeout connect 5s
timeout client 30s
timeout server 30s
# Retries
retries 3defaults
log globalНазначение: Наследует настройки логирования из секции global.
Альтернатива — переопределение:
defaults
log 127.0.0.1:514 local1 warningКогда переопределять:
defaults
option httplogНазначение: Включает детальное HTTP логирование.
Формат лога:
192.168.1.100:54321 [15/Jan/2024:10:23:45.123]
frontend backend/server 0/0/1/15/16 200 1234
- - ---- 1/1/0/0/0 0/0 "GET /api/users HTTP/1.1"
Без httplog (TCP mode):
192.168.1.100:54321 [15/Jan/2024:10:23:45.123]
frontend backend/server 0/0/1/15/16 200 1234
defaults
option dontlognullНазначение: Не логировать соединения без запросов (health checks, сканеры).
Проблема без dontlognull:
- - - - 0/0/0/0/0 408 0 - - ---- 0/0/0/0/0 0/0 ""
Зачем:
defaults
option forwardforНазначение: Добавляет заголовок X-Forwarded-For с IP клиента.
Пример:
# Клиент 203.0.113.50 → HAProxy → Backend
X-Forwarded-For: 203.0.113.50
Варианты:
# С указанием порта
option forwardfor addr header X-Forwarded-For
# Если заголовок уже есть — не добавлять
option forwardfor if-none
# Полная цепочка прокси
option forwardfor except 127.0.0.0/8Важно для backend:
defaults
mode httpВозможности:
Производительность:
mode tcpdefaults
mode tcpПрименение:
Ограничения:
defaults
mode healthНазначение: Специальный режим для health checks.
Использование:
listen health
bind *:9999
mode health
server haproxy 127.0.0.1 checkПроверка:
curl http://localhost:9999
# HTTP 200 — HAProxy здоровdefaults
timeout connect 5sНазначение: Время на установку TCP соединения с backend.
Что происходит при превышении:
503 Service Unavailableconnection timeoutРекомендации:
3-5s для локальной сети10s для cross-region backenddefaults
timeout client 30sНазначение: Максимальное время ожидания данных от клиента.
Сценарии:
Проблемы:
defaults
timeout server 30sНазначение: Максимальное время ожидания ответа от backend.
Что происходит при превышении:
504 Gateway TimeoutРекомендации:
defaults
timeout http-request 10sНазначение: Время на получение полного HTTP запроса от клиента.
Защищает от:
Рекомендации:
5-10s достаточно для большинства случаевdefaults
timeout http-keep-alive 5sНазначение: Время ожидания следующего запроса на keep-alive соединении.
Keep-alive:
Connection: keep-aliveРекомендации:
2-5s — баланс между reuse и ресурсамиdefaults
timeout queue 30sНазначение: Время ожидания в очереди, если все серверы busy.
Когда используется:
maxconn503 Service UnavailableПример:
backend web_servers
balance roundrobin
maxconn 100 per server
server web1 192.168.1.10:8080 maxconn 100
server web2 192.168.1.11:8080 maxconn 100defaults
retries 3Назначение: Количество попыток подключения к backend при ошибке.
Когда retry:
Поведение:
retries попыток — ошибка клиентуРекомендации:
2-3 для локальной сети1 для идемпотентных запросов (GET)0 для неидемпотентных (POST, PUT) — чтобы не дублироватьdefaults
option redispatchНазначение: Разрешает переключение на другой сервер после неудачи.
Пример:
Запрос → Server 1 (fail) → Server 2 (success)
Без redispatch:
С redispatch:
defaults
# Логирование
log global
option httplog
option dontlognull
# Режим
mode http
# Таймауты
timeout connect 5s
timeout client 30s
timeout server 30s
timeout http-request 10s
timeout http-keep-alive 5s
timeout queue 30s
# Опции
option forwardfor
option redispatch
retries 3WebSocket требует особых настроек:
defaults
timeout tunnel 1h # Для WebSocket туннелей
frontend ws_front
bind *:80
acl is_websocket hdr(Upgrade) -i websocket
use_backend ws_servers if is_websocket
backend ws_servers
timeout server 1h
timeout tunnel 1h
server ws1 192.168.1.10:8080 checktimeout tunnel:
# Connect timeout
backend web_servers: no server available for connection
# Client timeout
client timeout: 30s expired waiting for client data
# Server timeout
server timeout: 30s expired waiting for server response
На stats странице смотрите:
ReqRate — запросов в секундуConnRate — соединений в секундуRespTime — время ответа (avg, min, max)Wredis — запросов в очередиdefaults уменьшает дублирование конфигурацииmode http для веб, mode tcp для БДoption forwardfor передаёт IP клиента на backendoption redispatch + retries 3 повышают отказоустойчивостьtimeout tunnelИзучим секцию frontend: слушатели (bind), протоколы, SSL termination.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.