Skip to content

Caddyfile Directives

Configuration type du Caddyfile

Paramètres de base

Configurer le port d'écoute du serveur web en haut du fichier Caddyfile

shell
{
    admin off # désactive l'interface d'administration de Caddy
	http_port 80 # Port HTTP
	https_port 443 # Port HTTPS
}

à la suite de cette configuraiton je configure les domaines pour servir les sites et applications web.

Configuration d'un domaine avec une application PHP

shell
mondomaine.ext {
    # configuration des headers sécurisés
	header {
		-Server
		Set-Cookie: __Host-sess=123; path=/; Secure; HttpOnly; SameSite=Lax # exemple de configuration de cookie sécurisé
		Permissions-Policy "geolocation=(self), microphone=(), camera=()" # exemple de configuration de permissions
		Strict-Transport-Security "max-age=31536000; includeSubDomains" # exemple de configuration de HSTS (HTTP Strict Transport Security) veut dire que le navigateur doit toujours utiliser HTTPS
		X-Content-Type-Options "nosniff" # empêche le navigateur de deviner le type de contenu
		Referrer-Policy "no-referrer-when-downgrade" # empêche le navigateur de transmettre le referrer à un site HTTP
		Content-Security-Policy: "default-src 'self'; script-src 'self'; style-src 'self'; font-src 'self'; img-src 'self' data:;" # adapter aux besoins de l'application ici tout est bloqué sauf les ressources du site
		X-Frame-Options "DENY" # empêche le site d'être affiché dans un iframe
	}

    # stockage des logs de requêtes HTTP dans un fichier
	log {
		output file /var/log/caddy/requests.json {
			roll_size 2mb # taille maximale du fichier de logs
			roll_keep 2 # nombre de fichiers de logs à conserver (crée un .zip quand le fichier de log atteint la taille maximale roll_size)
			roll_keep_for 24h # durée de conservation des fichiers de logs
		}
	}

	root * /var/www/html/phpmyadmin/public # définir le dossier racine du site (le point d'ntrée de l'application - index.php)
	php_fastcgi unix//run/php/php8.2-fpm.sock # configuration du serveur PHP (version 8.2)
	encode gzip # compression des fichiers pour une meilleure performance
	file_server # activer le serveur de fichiers pour servir les fichiers statiques (assets, images, etc.)

    @blocked { # configuration pour bloquer l'accès à certains fichiers
		path /uploads/* # bloquer l'accès au dossier uploads et à tous ses fichiers et sous-dossiers (on ne pourra pas accéder à ces fichiers directement même si on connait le chemin il faudra impérativement que le fichier soit servi par unr route de l'application pour y accéder)
	}
	respond @blocked 403 # renvoyer une erreur 403 (Forbidden) si l'accès est bloqué
}

Configuration par exemple pour une application PHP (phpmyadmin) avec des headers sécurisés, stockage des logs de requêtes HTTP dans un fichier, configuration du serveur PHP, compression des fichiers et serveur de fichiers activé.

Configuration d'un domaine avec redirection

shell
mondomaine.ext {
    redir https://www.mondomaine.ext{uri}
}

Permet de rediriger les requêtes http://mondomaine.ext vers https://www.mondomaine.ext/uri

Configuration d'un reverse proxy

shell
mondomaine.ext {
    reverse_proxy localhost:3000
}

Permet de rediriger les requêtes http://mondomaine.ext vers le serveur local sur le port 3000 Par exemple pour rediriger les requêtes vers un serveur Node.js ou Mercure...

Configuration d'un domaine avec un site statique

shell
mondomaine.ext {
    root * /var/www/html/monsite
    file_server
    try_files {path} {path}/ /index.html   # servire le fichier index.html par défaut
}