GNU/Linux >> Tutoriels Linux >  >> Cent OS

Comment installer et configurer Caddy Web Server avec PHP sur Fedora 34 / CentOS 8

Caddy est un serveur Web open source écrit en langage Go. Il fournit une prise en charge HTTP/3, TLS v1.3, une configuration SSL automatique avec Let's Encrypt, un proxy inverse et prend en charge plusieurs plugins pour étendre ses fonctionnalités. Il a l'avantage que toute sa configuration est servie à partir d'un seul fichier, quel que soit le nombre de sites que vous devez héberger.

Ce tutoriel couvrira l'installation et la configuration de Caddy et PHP sur les serveurs basés sur Fedora 34 et CentOS 8. Nous expliquerons comment héberger des sites uniques et multiples et comment utiliser un 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é.

    $ sudo setenforce 0
    
  • Assurez-vous que tout est mis à jour.

    $ sudo dnf update
    

Étape 1 - Configuration du 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 le résultat suivant.

running

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

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

Il devrait afficher la sortie suivante.

dhcpv6-client mdns ssh

Autoriser les ports HTTP et HTTPS.

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

Revérifiez 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 le chariot

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 par la commande suivante.

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

Étape 3 - Principes de base de la configuration du chariot

Caddy utilise JSON comme format principal pour stocker ou écrire la configuration. C'est la manière la 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 paquet Fedora / CentOS inclut un Caddyfile à /etc/caddy/Caddyfile . Cela devrait ressembler à ceci (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 vérifier. Vous devriez voir la page d'accueil suivante.

Caddy offre de nombreuses fonctionnalités et configurations, nous n'utiliserons donc que les plus importantes pour servir notre site Web. La configuration par défaut sert sur HTTP, qui est spécifié comme :80 . La root indique à Caddy de rechercher les fichiers à servir dans /usr/share/caddy répertoire.

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

Configuration de Caddy pour un site Web HTML de base

Créons un fichier de configuration de base du caddy 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 sur Caddy.

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

Créez un fichier HTML à tester et ouvrez-le pour le modifier.

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

Ajoutez le code suivant.

<!DOCTYPE html>
<html>
<head>
<title>Hello from Caddy!</title>
</head>
<body>
<h1>Hello, from Caddy!</h1>
</body>
</html>

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

Ouvrez le Caddyfile pour le modifier.

$ sudo nano /etc/caddy/Caddyfile

Remplacez le code existant par ce qui suit.

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 du dossier. Le encode gzip indique à Caddy de compresser les fichiers à l'aide de la compression Gzip.

Le log La directive affiche le journal d'accès du site dans /var/log/caddy/example.access.log dossier. Par défaut, Caddy fait pivoter les fichiers journaux lorsqu'ils atteignent 100 Mo. Les fichiers pivotés sont supprimés après 90 jours ou lorsqu'il y a plus de 10 journaux pivotés. Vous pouvez modifier 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 en rotation sont limités à 10 Mo et supprimés après 10 jours (240 heures) ou lorsqu'il y a plus de 5 journaux en rotation.

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

L'header La directive active le contrôle du cache sur tous les fichiers statiques (fichiers images/javascript/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 à quelque chose de différent car il s'agit d'une référence nommée.

Une fois terminé, vous pouvez valider votre configuration à l'aide de la commande suivante.

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

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

Si vous recevez 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 modifiez la configuration.

$ sudo systemctl restart caddy

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

Configuration de plusieurs sites dans Caddy

Vous pouvez configurer plusieurs sites dans un seul fichier caddie. 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 convient à quelques sites, mais un seul peut devenir assez volumineux et difficile à gérer 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 depuis le répertoire dans votre /etc/caddty/caddyfile en haut du fichier.

import caddyconf/*.conf

La dernière étape consiste à créer des fichiers de configuration individuels pour chaque site.

Configuration des sites PHP

Jusqu'à présent, nous n'avons parlé que de servir des sites statiques à l'aide de Caddy. Vous pouvez 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 n'importe quel module PHP supplémentaire dont vous avez besoin. Vous devrez également configurer le fichier /etc/php-fpm.d/www.conf . Ouvrez le fichier pour le modifier.

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

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

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = caddy
; RPM: Keep a group allowed to write in log dir.
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 saisissant 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 html dossier.

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

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

<?php phpinfo();

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

Configuration du proxy inverse

Caddy peut également être utilisé comme 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 du chariot

Le Caddyfile vous permet de définir certaines options qui seront applicables globalement, c'est-à-dire qu'elles s'appliqueront à l'ensemble de vos sites. Il est avantageux 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 n'aborderons que quelques points importants. Pour le reste, vous devez vous référer à la documentation de Caddy.

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

{	
	#TLS Options
	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 de messagerie utilisé pour enregistrer le certificat SSL auprès de l'autorité Let's Encrypt. L'agrafage OCSP améliore les performances des sites HTTPS en fournissant automatiquement des informations de révocation de certificat aux navigateurs. Le max_header_size L'option 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 la prise en charge HTTP/2 pour les sites HTTP. Il s'agit de fonctionnalités expérimentales qui seront probablement supprimées à terme, alors faites attention avant de les activer.

Étape 5 - Amélioration de la sécurité

Activer l'authentification HTTP

Vous pouvez activer l'authentification HTTP simple pour certains répertoires. Tout d'abord, vous devez créer des identifiants d'authentification pour celui-ci.

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 ce faire.

$ caddy hash-password
Enter password:
Confirm password:
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 /secret répertoire avec les identifiants que vous venez de créer.

Renforcement de la sécurité du site et activation du 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-y 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/implémente ce qui suit.

  1. Active la prise en charge HSTS pour le site et tous ses sous-domaines.
  2. Active le filtrage XSS.
  3. Empêche le reniflage de contenu/MIME.
  4. Cela empêche le chargement de votre site dans un IFRAME.
  5. Cela empêche votre site d'être inclus dans les essais de suivi FLOC.
  6. Ajoute une politique de sécurité du contenu sur la façon dont les agents utilisateurs traitent les URL non sécurisées.
  7. Mette en œuvre une politique de référence afin que seul le référent soit envoyé pour les requêtes d'origine croisée si le protocole dit la même chose.
  8. La politique relative aux fonctionnalités fournit un mécanisme permettant d'activer et de désactiver certaines fonctionnalités du navigateur.

Ensuite, importez le fichier dans l'un des blocs de site de votre choix.

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

Redémarrez le serveur pour appliquer la modification.

Conclusion

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


Cent OS
  1. Comment installer le serveur Web Apache sur CentOS 7

  2. Comment installer et configurer VNC sur CentOS 7

  3. Comment installer et configurer Nextcloud avec Apache sur CentOS 7

  4. Comment installer et configurer Nagios sur CentOS 7

  5. Comment installer et configurer un serveur NFS sur CentOS 8

Comment installer et configurer Nextcloud sur Fedora 32

Comment installer et configurer le serveur VNC sur CentOS 7

Comment installer et configurer Memcached sur CentOS 8

Comment installer le serveur Web Caddy sur CentOS 7

Comment installer et configurer Caddy Web Server avec PHP sur Rocky Linux 8

Comment installer le serveur Web Caddy sur CentOS 8