Konfiguracja
Pełna referencja config.yaml — backendy, load balancing, health checks, rate limit, timeouty, retry, circuit breaker, TLS, logi i Redis.
Plik konfiguracyjny#
Konfiguracja żyje w config/config.yaml. Wszystkie czasy używają składni Go duration (5s, 1m30s). Walidacja jest ścisła — błędny plik wywala start z listą wszystkich nieprawidłowych pól.
Pełna referencja#
| Klucz | Domyślnie | Opis |
|---|---|---|
listen | :8080 | Adres nasłuchu |
backends[].url | — | URL backendu (http/https, bez credentials, query, fragmentu) |
backends[].weight | 1 | Waga dla weighted round robin (1–100) |
load_balancing.strategy | round_robin | round_robin, weighted_round_robin, least_connections |
health_check.interval | 5s | Czas między rundami health check |
health_check.timeout | 2s | Timeout pojedynczego probe |
health_check.path | /health | Endpoint zdrowia na backendach |
health_check.healthy_threshold | 2 | Sukcesy z rzędu → healthy |
health_check.unhealthy_threshold | 3 | Porażki z rzędu → unhealthy |
rate_limit.requests_per_minute | 100 | Sustained rate per IP klienta |
rate_limit.burst | 50 | Burst token bucket per IP |
rate_limit.trusted_proxies | [] | CIDR/IP uprawnione do X-Forwarded-For |
timeouts.backend_dial | 3s | Timeout połączenia z upstreamem |
timeouts.backend_response_header | 10s | Timeout nagłówków odpowiedzi |
timeouts.backend_idle_conn | 90s | Żywotność idle keep-alive |
timeouts.backend_tls_handshake | 5s | Timeout TLS handshake |
timeouts.backend_max_idle_conns | 256 | Rozmiar puli idle connections |
timeouts.backend_max_idle_conns_per_host | 64 | Idle connections per backend |
timeouts.server_read | 15s | Timeout czytania requestu |
timeouts.server_read_header | 5s | Timeout czytania nagłówków |
timeouts.server_write | 30s | Timeout zapisu odpowiedzi |
timeouts.server_idle | 60s | Keep-alive idle |
timeouts.shutdown | 10s | Budżet graceful shutdown |
retry.max_attempts | 2 | Łączna liczba prób (1–10), tylko idempotentne bez body |
circuit_breaker.failure_threshold | 5 | Porażki przed otwarciem |
circuit_breaker.open_timeout | 30s | Czas przed half-open probe |
circuit_breaker.half_open_probes | 1 | Sukcesy probe do zamknięcia |
tls.cert_file / tls.key_file | "" | HTTPS (oba wymagane) |
log.level | info | debug, info, warn, error |
log.format | json | json lub text |
redis.addr | "" | Adres Redis włącza rozproszony rate limiting |
Przykładowa konfiguracja#
yamlconfig.yaml
listen: ":8080"
backends:
- url: http://localhost:8081
weight: 3
- url: http://localhost:8082
weight: 1
load_balancing:
strategy: weighted_round_robin
health_check:
interval: 5s
timeout: 2s
path: /health
healthy_threshold: 2
unhealthy_threshold: 3
rate_limit:
requests_per_minute: 100
burst: 50
trusted_proxies: []
timeouts:
backend_dial: 3s
backend_response_header: 10s
backend_idle_conn: 90s
backend_tls_handshake: 5s
backend_max_idle_conns: 256
backend_max_idle_conns_per_host: 64
server_read: 15s
server_read_header: 5s
server_write: 30s
server_idle: 60s
shutdown: 10s
retry:
max_attempts: 2
circuit_breaker:
failure_threshold: 5
open_timeout: 30s
half_open_probes: 1
tls:
cert_file: ""
key_file: ""
log:
level: info
format: json
redis:
addr: ""
Zmienne środowiskowe#
| Zmienna | Przeznaczenie |
|---|---|
ADMIN_TOKEN | Bearer token Admin API; bez niego API jest wyłączone |
REDIS_PASSWORD | Hasło do Redis |
GRAFANA_ADMIN_PASSWORD | Hasło admina Grafany (stack monitoring) |
Sekrety tylko w environment
Tokeny i hasła nigdy nie trafiają do YAML-a. Konfiguracja jest walidowana pod kątem credentials w URL-ach backendów — http://user:pass@host zostanie odrzucony.
Walidacja#
Proxy odrzuca konfigurację przy starcie, jeśli:
- URL backendu ma credentials, query lub fragment,
- waga jest poza zakresem 1–100,
- strategia jest nieznana,
retry.max_attemptsjest poza 1–10,- TLS ma tylko jeden z dwóch plików,
- czasy są nieparsowalne lub ujemne.
Błąd wymienia każde nieprawidłowe pole, więc poprawiasz wszystko za jednym razem.