# đŸ§Ÿ Directives Chaque entrĂ©e indique la syntaxe, la valeur par dĂ©faut lorsque la directive est absente, et les endroits oĂč la directive peut apparaĂźtre. L'attestation de version — la ligne `Since:` qui indiquerait depuis quand une directive existe — n'est pas encore publiĂ©e. 📖 Cette page documente un sous-ensemble de dĂ©part. Les directives acceptĂ©es mais pas encore documentĂ©es ici sont tout de mĂȘme validĂ©es par `pingclair validate` ; une directive que le serveur n'implĂ©mente pas est refusĂ©e par son nom plutĂŽt qu'acceptĂ©e en silence. ## encode ```text Syntax: encode [ ...] Default: no compression Context: site block ``` Compresse les rĂ©ponses. Les arguments sont listĂ©s par ordre de prĂ©fĂ©rence : le premier format acceptĂ© par le client est utilisĂ©. Les formats pris en charge sont `zstd` et `gzip`. Demander Brotli est une erreur de compilation plutĂŽt qu'une dĂ©gradation silencieuse vers gzip : le proxy n'a pas d'encodeur Brotli en flux, l'option ne peut donc pas ĂȘtre honorĂ©e. ```caddyfile example.com { encode zstd gzip file_server ./public } ``` ## file_server ```text Syntax: file_server [] Default: disabled Context: site block ``` Sert des fichiers depuis le disque, avec dĂ©tection du type MIME, requĂȘtes partielles et validation par ETag et `Last-Modified`. L'argument facultatif dĂ©finit la racine pour cette seule directive. Lorsqu'il est omis, la racine du site dĂ©finie par `root` est utilisĂ©e. ```caddyfile localhost:8080 { file_server ./public } ``` ## header ```text Syntax: header [] header [] { # set + # append - # remove set # set, spelled explicitly } Default: none Context: site block ``` Ajoute, remplace ou supprime des en-tĂȘtes de rĂ©ponse. Un nom de champ seul dĂ©finit l'en-tĂȘte ; le prĂ©fixe `+` l'ajoute Ă  la suite et le prĂ©fixe `-` le supprime. ```caddyfile example.com { header { X-Frame-Options "DENY" X-Content-Type-Options "nosniff" Strict-Transport-Security "max-age=31536000; includeSubDomains" -X-Powered-By } } ``` ## log ```text Syntax: log [] { } Default: no access sink Context: site block, global options ``` Configure une destination de journal d'accĂšs. Un `log` seul active la destination par dĂ©faut du site ; `log { ... }` configure un journal nommĂ©, et `log ` sans bloc renvoie Ă  un canal dĂ©clarĂ© dans les options globales. Les options de bloc couvrent la destination et le format (`output`, `format`), le sĂ©lecteur `hostnames`, les filtres `include` et `exclude`, l'Ă©chantillonnage (`sampling`) et les rĂ©glages de rotation des fichiers (`mode`, `dir_mode`, `roll_*`). ```caddyfile example.com { log { output file /var/log/pingclair/access.log } } ``` Les enregistrements sont regroupĂ©s en lots avant d'ĂȘtre Ă©crits, et une destination qui ne suit pas le rythme perd des enregistrements et les compte dans `pingclair_access_log_dropped_total`. Écrire chaque requĂȘte dans le journal du systĂšme entraĂźne Ă©galement le coĂ»t du rĂ©cepteur de ce journal. ## reverse_proxy ```text Syntax: reverse_proxy [] [ ...] reverse_proxy [] { ... } Default: none Context: site block ``` Transmet les requĂȘtes Ă  un ou plusieurs amonts. La politique de rĂ©partition de charge par dĂ©faut est le tourniquet. Les amonts dĂ©signĂ©s par un nom d'hĂŽte sont rĂ©solus Ă  nouveau Ă  l'intervalle dĂ©fini par `dns_refresh` : un backend qui redĂ©marre sur une nouvelle adresse est suivi sans intervention, et une rĂ©solution en Ă©chec conserve l'adresse prĂ©cĂ©dente dans la rotation. ```caddyfile :80 :8080 { reverse_proxy { lb_policy least_conn to 10.0.0.1:8080 { weight 3 } to 10.0.0.2:8080 to 10.0.0.3:8080 { backup } health_check { path /health interval 5s timeout 2s status 200 204 consecutive_failure 3 consecutive_success 2 } } } ``` Les contrĂŽles de santĂ© actifs s'exĂ©cutent hors du chemin des requĂȘtes : un backend en Ă©chec quitte la rotation avant qu'une requĂȘte utilisateur ne l'atteigne, et y revient aprĂšs le nombre configurĂ© de sondes rĂ©ussies. Un amont `backup` n'est utilisĂ© que lorsque tous les amonts principaux sont indisponibles. ## root ```text Syntax: root [] Default: none Context: site block ``` DĂ©finit la racine du site. `file_server` peut prendre sa propre racine, mais la dĂ©finir ici est ce qui permet au serveur de fichiers et aux autres directives manipulant des fichiers de s'accorder sur un emplacement unique. ```caddyfile example.com { root * /srv/public file_server } ``` ## tls ```text Syntax: tls tls { } Default: automatic HTTPS for public names Context: site block ``` ContrĂŽle la façon dont les certificats sont obtenus. | Mode | Comportement | | --- | --- | | `tls auto` | Obtient des certificats publics via ACME et les renouvelle. | | `tls internal` | Émet depuis une autoritĂ© de certification locale persistante. La racine est publiĂ©e dans `$PINGCLAIR_TLS_STORE/internal/root.crt` et doit ĂȘtre approuvĂ©e par les clients. | | `tls { cert ...; key ... }` | Utilise les fichiers de certificat et de clĂ© nommĂ©s dans le bloc. | La forme en bloc active aussi HTTP/3 avec `http3`, et prend en charge l'Ă©mission DNS-01 avec `dns cloudflare `, seul fournisseur DNS implĂ©mentĂ©. Nommer un autre fournisseur est refusĂ© au dĂ©marrage plutĂŽt qu'acceptĂ© et ignorĂ©, car DNS-01 est ce qui rend possibles les certificats wildcard. ```caddyfile example.com { tls { cert /etc/pingclair/certs/example.com.pem key /etc/pingclair/certs/example.com.key http3 } reverse_proxy localhost:3000 } ``` ## 🌍 Global options Les options globales s'Ă©crivent dans le bloc sans nom, en tĂȘte de fichier. | Option | Syntax | Notes | | --- | --- | --- | | `admin` | `admin
[]` | Écouteur de l'Admin API. Sans jeton, seules les connexions de boucle locale sont acceptĂ©es. | | `auto_https` | `auto_https on \| off \| disable_redirects` | ContrĂŽle HTTPS automatique et la redirection du port 80. | | `dns_refresh` | `dns_refresh ` | Intervalle de rĂ©solution des amonts dĂ©signĂ©s par un nom d'hĂŽte. `off` fige les adresses rĂ©solues au dĂ©marrage. | | `email` | `email
` | Adresse e-mail du compte ACME utilisĂ©e pour l'Ă©mission. | | `trusted_proxies` | `trusted_proxies [ ...]` | Pairs autorisĂ©s Ă  affirmer des en-tĂȘtes d'identitĂ© client. Un changement exige un redĂ©marrage. | ```caddyfile { email admin@example.com admin 127.0.0.1:2019 dns_refresh 30s } ```