Serveur Web · 10 min read · Oct 30, 2025

Comment installer et configurer le serveur web Caddy avec PHP sur Fedora 34 / CentOS 8

Caddy est un serveur web open-source écrit dans le langage Go. Il offre un support HTTP/3, TLS v1.3, une configuration SSL automatique avec Let’s Encrypt, un proxy inverse, et prend en charge plusieurs plugins pour étendre sa fonctionnalité. Il a l’avantage que toute sa configuration est servie à partir d’un seul fichier, peu importe combien de sites vous devez héberger.

Ce tutoriel couvrira l’installation et la configuration de Caddy et PHP sur des serveurs basés sur Fedora 34 et CentOS 8. Nous aborderons comment héberger un ou plusieurs sites et comment utiliser le proxy inverse avec quelques autres fonctionnalités de sécurité.

Prérequis

  • Serveur basé sur Fedora 34 ou CentOS 8
  • Un utilisateur non-root avec des privilèges sudo
  • Un nom de domaine pointant vers l’adresse IP du serveur
  • SELinux est désactivé. shell $ sudo setenforce 0
  • Assurez-vous que tout est à jour. shell $ sudo dnf update

Étape 1 - Configurer le pare-feu

La première étape consiste à configurer le pare-feu pour ouvrir les ports HTTP et HTTPS. Fedora et CentOS sont livrés avec le pare-feu Firewalld préinstallé.

Vérifiez si le pare-feu est en cours d’exécution.

$ sudo firewall-cmd --state

Vous devriez obtenir la sortie suivante.

running

Vérifiez les services/ports actuellement autorisés.

$ sudo firewall-cmd --permanent --list-services

Cela devrait afficher la sortie suivante.

dhcpv6-client mdns ssh

Autorisez les ports HTTP et HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Vérifiez à nouveau l’état du pare-feu.

$ sudo firewall-cmd --permanent --list-services

Vous devriez voir une sortie similaire.

dhcpv6-client http https mdns ssh

Rechargez le pare-feu.

$ sudo systemctl reload firewalld

Étape 2 - Installer Caddy

La première étape consiste à installer le serveur. Les étapes d’installation restent les mêmes pour Fedora 34 et CentOS 8.

$ sudo dnf install 'dnf-command(copr)'
$ sudo dnf copr enable @caddy/caddy
$ sudo dnf install caddy

Vous pouvez vérifier l’installation avec la commande suivante.

$ caddy version
v2.4.3 h1:Y1FaV2N4WO3rBqxSYA8UZsZTQdN+PwcoOcAiZTM8C0I=

Étape 3 - Bases de la configuration de Caddy

Caddy utilise JSON comme format principal pour stocker ou écrire la configuration. C’est le moyen le plus flexible d’écrire la configuration et prend en charge toutes les fonctionnalités de Caddy. Mais si vous ne savez pas comment écrire des fichiers JSON, Caddy propose un moyen plus simple sous la forme de Caddyfile.

Le package Fedora / CentOS inclut un Caddyfile à /etc/caddy/Caddyfile. Il devrait ressembler à ce qui suit (en ignorant les commentaires)

:80 {
        root * /usr/share/caddy
        file_server
}

Activez et démarrez le démon caddy.

$ sudo systemctl enable --now caddy

Vous pouvez ouvrir l’URL http://youripaddress pour vérifier. Vous devriez voir la page d’accueil suivante.

Page d'accueil de Caddy

Caddy offre de nombreuses fonctionnalités et configurations, donc nous allons seulement nous concentrer sur les plus importantes pour servir notre site web. La configuration par défaut sert via HTTP, ce qui est spécifié comme :80. La directive root indique à Caddy de chercher les fichiers à servir dans le répertoire /usr/share/caddy.

La directive file_server indique à Caddy d’agir en tant que serveur de fichiers, ce qui signifie qu’il ne servira que des fichiers statiques à l’adresse par défaut.

Configurer Caddy pour un site web HTML basique

Créons un fichier de configuration Caddy basique pour servir un site web statique.

Créez un répertoire pour héberger votre site web et stocker vos fichiers journaux.

$ sudo mkdir -p /var/www/example.com/html
$ sudo mkdir /var/log/caddy

Définissez la propriété du répertoire à Caddy.

$ sudo chown caddy:caddy /var/www/example.com/html -R
$ sudo chown caddy:caddy /var/log/caddy

Créez un fichier HTML pour tester et ouvrez-le pour l’édition.

$ sudo nano /var/www/example.com/html/index.html

Ajoutez le code suivant.




Bonjour de Caddy !


Bonjour, de Caddy !

Appuyez sur Ctrl + X pour fermer l’éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier.

Ouvrez le Caddyfile pour l’édition.

$ sudo nano /etc/caddy/Caddyfile

Remplacez le code existant par le suivant.

example.com {
    root * /var/www/example.com/html
    file_server
    encode gzip

    log {
        output file /var/log/caddy/example.access.log
    }

    @static {
        file
        path *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.pdf *.webp
    }
    header @static Cache-Control max-age=5184000

    tls [email protected]
}

Appuyez sur Ctrl + X pour fermer l’éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier.

Passons en revue toutes les directives dans le fichier. La directive encode gzip indique à Caddy de compresser les fichiers en utilisant la compression Gzip.

La directive log envoie le journal d’accès pour le site au fichier /var/log/caddy/example.access.log. Par défaut, Caddy fait tourner les fichiers journaux lorsqu’ils atteignent 100 Mo. Les fichiers tournés sont supprimés après 90 jours ou lorsqu’il y a plus de 10 journaux tournés. Vous pouvez changer les paramètres par défaut de la manière suivante.

log {
    output file /var/log/caddy/example.access.log {
        roll_size 10MB
        roll_keep 5
        roll_keep_for 240h
    }
}

Dans le code ci-dessus, les fichiers journaux tournés sont limités à 10 Mo et supprimés après 10 jours (240 heures) ou lorsqu’il y a plus de 5 journaux tournés.

Caddy générera et installera automatiquement le certificat SSL sans aucune intervention. La directive tls nous permet de fournir des options supplémentaires pour configurer HTTPS, comme l’adresse e-mail utilisée pour obtenir les rapports de Let’s Encrypt.

La directive header active le Cache-control sur tous les fichiers statiques (images/javascript/fichiers CSS). Vous pouvez ajouter plus d’extensions de fichiers ou copier le code pour définir une durée différente pour différents formats de fichiers. Vous devrez changer la valeur static en quelque chose de différent car c’est une référence nommée.

Une fois terminé, vous pouvez valider votre configuration en utilisant la commande suivante.

$ caddy validate --adapter caddyfile --config /etc/caddy/Caddyfile

Nous devons utiliser l’option --adapter caddyfile car, par défaut, la commande ne valide que les configurations JSON.

Si vous obtenez l’avertissement suivant, vous pouvez le corriger facilement avec une seule commande.

WARN    input is not formatted with 'caddy fmt' {"adapter": "caddyfile", "file": "/etc/caddy/Caddyfile", "line": 2}

Exécutez la commande suivante pour corriger l’erreur.

$ caddy fmt --overwrite /etc/caddy/Caddyfile

La commande ci-dessus formate et écrase le Caddyfile.

Redémarrez Caddy pour activer la configuration. Vous devrez redémarrer le serveur chaque fois que vous apportez une modification à la configuration.

$ sudo systemctl restart caddy

Ouvrez dans votre navigateur, et vous devriez voir la page suivante, ce qui signifie que la configuration fonctionne.

Configurer plusieurs sites dans Caddy

Vous pouvez configurer plusieurs sites dans un seul fichier caddy. Pour ce faire, créez des blocs séparés pour chaque site de la manière suivante.

example1.com {
    root * /var/www/example1.com/html
    ...
}

example2.com {
    root * /var/www/example2.com/html
    ...
}

Cette méthode est acceptable pour quelques sites, mais un seul peut devenir assez grand et difficile à maintenir si vous hébergez plusieurs sites.

Créez le répertoire /etc/caddy/caddyconf.

$ sudo mkdir /etc/caddy/caddyconf

Vous pouvez maintenant importer les fichiers de configuration du répertoire dans votre /etc/caddy/Caddyfile en haut du fichier.

import caddyconf/*.conf

L’étape finale consiste à créer des fichiers de configuration individuels pour chaque site.

Configurer des sites PHP

Jusqu’à présent, nous avons parlé uniquement de la diffusion de sites statiques à l’aide de Caddy. Vous pouvez également utiliser Caddy tout aussi facilement pour servir des sites PHP dynamiques. Pour activer le support PHP, ajoutez le code suivant dans votre bloc de site.

example1.com {
    root * /var/www/example1.com/html
    ...
    php_fastcgi unix//run/php-fpm/www.sock
}

Vous devrez également installer PHP.

$ sudo dnf install php-fpm php-cli php-gd

Vous pouvez installer tout module PHP supplémentaire dont vous avez besoin. Vous devrez également configurer le fichier /etc/php-fpm.d/www.conf. Ouvrez le fichier pour l’édition.

$ sudo nano /etc/php-fpm.d/www.conf

Nous devons définir l’utilisateur/groupe Unix des processus PHP sur caddy. Trouvez les lignes user=apache et group=apache dans le fichier et changez-les en nginx.

...
; Utilisateur/groupe Unix des processus
; Remarque : L'utilisateur est obligatoire. Si le groupe n'est pas défini, le groupe de l'utilisateur par défaut
;       sera utilisé.
; RPM : utilisateur apache choisi pour fournir l'accès aux mêmes répertoires que httpd
user = caddy
; RPM : Gardez un groupe autorisé à écrire dans le répertoire des journaux.
group = caddy
...

Trouvez la ligne listen.acl_users = apache,nginx et changez sa valeur comme suit.

...
listen.acl_users = apache,nginx,caddy
...

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Démarrez le processus PHP-fpm.

$ sudo systemctl start php-fpm

Pour tester votre configuration PHP, créez un fichier test.php dans le dossier html.

$ sudo nano /var/www/example.com/html/test.php

Ajoutez le contenu suivant et enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Lancez http://example.com/test.php dans votre navigateur, et vous devriez voir ce qui suit.

Page de test PHP de Caddy

Configurer le proxy inverse

Caddy peut également être utilisé comme un serveur proxy inverse. Pour le configurer, utilisez le code suivant.

example1.com {
    ...
    reverse_proxy localhost:8000 {
        header_up Host {http.reverse_proxy.header.X-Forwarded-Host}
    }
}

Étape 4 - Options globales de Caddy

Le Caddyfile vous permet de définir certaines options qui seront applicables globalement, c’est-à-dire qu’elles s’appliqueront à tous vos sites. Il est bénéfique de définir des options globales afin de ne pas avoir à les redéclarer dans chaque bloc de serveur.

Vous devez inclure les options globales tout en haut de votre Caddyfile. Il existe de nombreuses options que vous pouvez définir globalement. Nous allons passer en revue seulement quelques-unes d’entre elles. Pour le reste, vous devriez vous référer à la documentation de Caddy.

Voici quelques options par défaut que vous pouvez utiliser dans votre Caddyfile.

{ 
    #Options TLS
    email [email protected]

    servers :443 {
        protocol {
            experimental_http3
        }
        max_header_size 5mb
    }
    
    servers :80 {
        protocol {
            allow_h2c
        }
        max_header_size 5mb
    }
}

Dans le code ci-dessus, email spécifie l’identifiant e-mail utilisé pour enregistrer le certificat SSL auprès de l’autorité Let’s Encrypt. Le stapling OCSP améliore les performances des sites HTTPS en fournissant automatiquement des informations sur la révocation des certificats aux navigateurs. L’option max_header_size spécifie la taille des en-têtes de requête HTTP du client à analyser.

Nous avons également activé le protocole HTTP/3 pour les sites HTTPS et le support HTTP/2 pour les sites HTTP. Ce sont des fonctionnalités expérimentales et seront probablement supprimées à terme, donc faites attention avant de les activer.

Étape 5 - Améliorer la sécurité

Activer l’authentification HTTP

Vous pouvez activer une authentification HTTP simple pour certains répertoires. Tout d’abord, vous devez créer des identifiants d’authentification pour cela.

Caddy n’accepte que les mots de passe hachés dans la configuration. Donc, vous devez d’abord créer un mot de passe haché. Exécutez la commande suivante pour cela.

$ caddy hash-password
Entrez le mot de passe :
Confirmez le mot de passe :
JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX

Une fois que vous avez le mot de passe prêt, entrez le code suivant dans votre Caddyfile.

basicauth /secret/* {
    John JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX
}

La commande ci-dessus protégera le répertoire /secret avec les identifiants que vous venez de créer.

Renforcer la sécurité du site et activer HSTS

Il existe d’autres configurations de sécurité que vous pouvez ajouter pour protéger vos sites. Pour cela, nous allons créer un autre fichier /etc/caddy/caddy_security.conf.

$ sudo nano /etc/caddy/caddy_security.conf

Ajoutez le code suivant.

header {
    Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    X-Xss-Protection "1; mode=block"
    X-Content-Type-Options "nosniff"
    X-Frame-Options "DENY"
    Permissions-Policy "interest-cohort=()"
    Content-Security-Policy "upgrade-insecure-requests"
    Referrer-Policy "strict-origin-when-cross-origin"
    Cache-Control "public, max-age=15, must-revalidate"
    Feature-Policy "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'self'; camera 'none'; encrypted-media 'none'; fullscreen 'self'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; payment 'none'; picture-in-picture *; speaker 'none'; sync-xhr 'none'; usb 'none'; vr 'none'"
}

Le code ci-dessus active/met en œuvre les éléments suivants.

  1. Active le support HSTS pour le site et tous ses sous-domaines.
  2. Active le filtrage XSS.
  3. Empêche le sniffing de contenu/MIME.
  4. Empêche votre site d’être chargé à l’intérieur d’un IFRAME.
  5. Empêche votre site d’être inclus dans les essais de suivi FLOC.
  6. Ajoute une politique de sécurité de contenu sur la façon dont les agents utilisateurs traitent les URL non sécurisées.
  7. Met en œuvre une politique de référent afin que seul le référent soit envoyé pour les requêtes inter-domaines si le protocole est le même.
  8. La politique de fonctionnalités fournit un mécanisme pour activer et désactiver certaines fonctionnalités du navigateur.

Ensuite, importez le fichier dans n’importe quel bloc de site que vous souhaitez.

example.com {
    ...
    import /etc/caddy/caddy_security.conf
}

Redémarrez le serveur pour appliquer le changement.

Conclusion

Cela conclut le tutoriel sur l’installation et la configuration du serveur web Caddy sur des serveurs basés sur Fedora 34 / CentOS 8. Si vous avez des questions, postez-les dans les commentaires ci-dessous.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.