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
}