Configuration

bouine est configuré via un fichier YAML passé avec --config. Les variables d’environnement sont développées (${VAR}, ${VAR:-default}) avant le décodage.

listen:
  http: ":8080"
  https: ":443"
  admin: ":9000"

storage:
  hot_max_bytes: 1GiB

upstream_pools:
  - name: app
    targets: ["app.default.svc:8080"]
    health:
      active:
        path: /healthz
        interval: 10s

routes:
  - match: { path_prefix: /api/ }
    pool: app
    cache:
      ttl_default: 60s
      stale_while_revalidate: 10s
      stale_if_error: 300s

Pages dans cette section

Référence des champs

listen

ChampPar défautDescription
http":8080"Adresse du listener HTTP/1.1
httpsAdresse du listener HTTPS (H1)
admin":9000"Adresse du serveur d’administration
max_connections0Nombre maximal de connexions data-plane simultanées (0 = défaut 4096). Protège contre l’épuisement des FD. Les connexions keep-alive inactives occupent aussi un slot.
idle_timeout120sTimeout keep-alive des connexions data-plane inactives. Avec un proxy amont (upstream) en face, gardez son timeout keep-alive inactif en dessous de cette valeur pour que le proxy ferme les connexions inactives en premier.
tcp_quickacktrue (Linux)Active TCP_QUICKACK sur les connexions acceptées pour réduire la latence (no-op sur les autres plateformes)
read_timeout30sDurée maximale de lecture de l’en-tête et du corps d’une requête (depuis v0.5.9). C’est la défense anti-slowloris — ce n’est pas un deadline de bout en bout (les fetch origin sont bornés par fetch_timeout). À augmenter pour des clients mobiles lents ou de gros uploads. Doit rester sous le filet de sécurité de 5 minutes du data-plane.

storage

ChampPar défautDescription
hot_max_bytes1GiBTaille maximale du tier hot en RAM
warm_dirRépertoire du tier warm (mmap)
warm_max_bytesTaille maximale du tier warm sur disque

upstream_pools[]

ChampDescription
nameNom du pool, référencé par routes[].pool
targets[]Liste des adresses des serveurs d’origine
health.activeHealth check actif (path, interval, timeout, unhealthy_threshold)
health.passiveHealth check passif (consecutive_5xx, eject_for)

routes[]

ChampDescription
match.path_prefixCorrespondance par préfixe de chemin
match.hostCorrespondance par hôte
match.methodsCorrespondance par méthodes HTTP
poolNom du upstream pool
cache.ttl_defaultTTL par défaut si l’origine n’envoie pas d’en-têtes de fraîcheur
cache.ttl_overrideOverride le TTL interne de bouine
cache.stale_while_revalidateDurée pendant laquelle le contenu périmé est servi pendant la revalidation
cache.stale_if_errorDurée pendant laquelle le contenu périmé est servi en cas d’erreur d’origine
cache.negative_ttlTTL pour les réponses d’erreur cachables
cache.jitter_percentPourcentage aléatoire appliqué au TTL
cache.enabledActive ou désactive le cache pour cette route (par défaut: true)
cache.max_fetch_concurrencyNombre maximal de fetch origin simultanés pour cette route (défaut 32)
cache.fetch_timeoutTimeout origin par route (en-tête + corps). Sans valeur explicite, la route hérite de connect.response_header_timeout du pool (défaut 30s) ; avec une valeur, elle est appliquée telle quelle — une route peut dépasser le réglage du pool (sémantique depuis v0.5.11)
cache.fetch_wait_timeoutDurée d’attente d’un slot de fetch avant shedding (défaut 100ms, max 1s) : objet périmé servi si disponible, sinon 503 + Retry-After: 1

cluster

ChampDescription
enabledActive le clustering
modestrong ou eventual
join[]Liste des adresses seed pour le gossip
peer_max_idle_conn_durationDurée de vie des connexions peer inactives (défaut 120s). Doit rester en dessous de admin.idle_timeout (défaut 300s) — la validation de config rejette toute combinaison explicite qui viole cet ordre
peer_fetch_concurrencyRPC peer-fetch/put simultanés par nœud (défaut 4, plage 1–128, depuis v0.5.11). En mode strong la plupart des hits sont des peer hits : à augmenter avec peer_max_conns_per_host sous charge
ban_ttlDurée de rétention des bans d’invalidation avant élagage par le reaper (défaut 24h, ≥ 1s si défini, depuis v0.5.20)
tlsConfiguration mTLS pour la communication entre peers

tls

ChampDescription
certs[]Liste des certificats (cert_file + key_file)
min_versionVersion TLS minimale (par défaut: 1.2)

cloudflare

ChampDescription
zone_idID de zone Cloudflare
api_tokenJeton API Cloudflare (permission Cache Purge)
asyncMode asynchrone (par défaut: true)
propagateQuelles opérations propager (purge, ban, refresh)

tracing

ChampDescription
endpointPoint de terminaison OTLP (format host:port, pas URL)
service_nameNom du service pour les traces (par défaut: “bouine”)
sampling_rateTaux d’échantillonnage (0.0 à 1.0)

admin

ChampDescription
tokenJeton bearer pour l’authentification de l’API d’administration
idle_timeoutTimeout keep-alive des connexions du serveur d’admin (défaut 300s), y compris les RPC peer du cluster (/v1/peer/*). Gardez cluster.peer_max_idle_conn_duration en dessous de cette valeur.