Introduction
Le serveur HTTP Apache est le serveur Web le plus utilisé au monde. Il fournit de nombreuses fonctionnalités puissantes, notamment des modules chargeables dynamiquement, une prise en charge robuste des supports et une intégration étendue avec d’autres logiciels populaires.
Dans ce guide, vous allez installer un serveur web Apache avec des hôtes virtuels sur votre serveur CentOS 7.
Prérequis
Vous aurez besoin des éléments suivants pour compléter ce guide:
- Un utilisateur non root avec des privilèges sudo configurés sur votre serveur, configurés en suivant le guide de configuration initiale du serveur pour CentOS 7.
- Un pare-feu de base configuré en suivant les Étapes supplémentaires recommandées pour le guide des nouveaux serveurs CentOS 7.
Étape 1 — Installation d’Apache
Apache est disponible dans les dépôts logiciels par défaut de CentOS, ce qui signifie que vous pouvez l’installer avec le gestionnaire de paquets yum
.
En tant qu’utilisateur sudo non root configuré dans les conditions préalables, mettez à jour l’index de paquets Apache local httpd
pour refléter les dernières modifications en amont :
- sudo yum update httpd
Une fois les paquets mis à jour, installez le paquet Apache :
- sudo yum install httpd
Après avoir confirmé l’installation, yum
installera Apache et toutes les dépendances requises.
Si vous avez terminé les Étapes supplémentaires recommandées pour le guide des nouveaux serveurs CentOS 7 mentionnées dans la section prérequis, vous aurez installé firewalld
sur votre serveur et vous devrez ouvrir le port 80
pour permettre à Apache de servir des requêtes via HTTP. Si vous ne l’avez pas déjà fait, vous pouvez le faire en activant le service firewalld
du http
avec la commande suivante:
- sudo firewall-cmd --permanent --add-service=http
Si vous prévoyez de configurer Apache pour diffuser du contenu via HTTPS, vous voudrez également ouvrir le port 443
en activant le service https
:
- sudo firewall-cmd --permanent --add-service=https
Ensuite, rechargez le pare-feu pour mettre en vigueur ces nouvelles règles :
- sudo firewall-cmd --reload
Une fois le pare-feu rechargé, vous êtes prêt à démarrer le service et à vérifier le serveur Web.
Étape 2 – Vérification de votre serveur Web
Apache ne démarre pas automatiquement sur CentOS une fois l’installation terminée. Vous devrez démarrer le processus Apache manuellement :
- sudo systemctl start httpd
Vérifiez que le service est en cours d’exécution avec la commande suivante :
- sudo systemctl status httpd
Vous verrez un active
statut lorsque le service est en cours d’exécution :
OutputRedirecting to /bin/systemctl status httpd.service● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2019-02-20 01:29:08 UTC; 5s ago Docs: man:httpd(8) man:apachectl(8) Main PID: 1290 (httpd) Status: "Processing requests..." CGroup: /system.slice/httpd.service ├─1290 /usr/sbin/httpd -DFOREGROUND ├─1291 /usr/sbin/httpd -DFOREGROUND ├─1292 /usr/sbin/httpd -DFOREGROUND ├─1293 /usr/sbin/httpd -DFOREGROUND ├─1294 /usr/sbin/httpd -DFOREGROUND └─1295 /usr/sbin/httpd -DFOREGROUND...
Comme vous pouvez le voir sur cette sortie, le service semble avoir démarré avec succès. Cependant, la meilleure façon de tester cela est de demander une page à Apache.
Vous pouvez accéder à la page de destination Apache par défaut pour confirmer que le logiciel fonctionne correctement via votre adresse IP. Si vous ne connaissez pas l’adresse IP de votre serveur, vous pouvez l’obtenir de différentes manières à partir de la ligne de commande.
Tapez ceci à l’invite de commande de votre serveur :
- hostname -I
Cette commande affichera toutes les adresses réseau de l’hôte, vous récupérerez donc quelques adresses IP séparées par des espaces. Vous pouvez les essayer dans votre navigateur Web pour voir si elles fonctionnent.
Alternativement, vous pouvez utiliser curl
pour demander votre adresse IP à icanhazip.com
, qui vous donnera votre adresse IPv4 publique vue d’un autre emplacement sur Internet:
- curl -4 icanhazip.com
Lorsque vous avez l’adresse IP de votre serveur, entrez-la dans la barre d’adresse de votre navigateur :
http://your_server_ip
Vous verrez la page Web CentOS 7 Apache par défaut :
Cette page indique qu’Apache fonctionne correctement. Il comprend également des informations de base sur les fichiers et les emplacements de répertoires Apache importants. Maintenant que le service est installé et en cours d’exécution, vous pouvez maintenant utiliser différentes commandes systemctl
pour gérer le service.
Étape 3 – Gestion du processus Apache
Maintenant que votre serveur Web est opérationnel, passons en revue quelques commandes de gestion de base.
Pour arrêter votre serveur web, tapez :
- sudo systemctl stop httpd
Pour démarrer le serveur Web lorsqu’il est arrêté, tapez :
- sudo systemctl start httpd
Pour arrêter puis redémarrer le service, tapez :
- sudo systemctl restart httpd
Si vous souhaitez arrêter le service, tapez :
- sudo systemctl restart httpd
Si vous faites simplement des modifications de configuration, Apache peut souvent recharger sans abandonner les connexions. Pour ce faire, utilisez cette commande:
- sudo systemctl reload httpd
Par défaut, Apache est configuré pour démarrer automatiquement au démarrage du serveur. Si ce n’est pas ce que vous voulez, désactivez ce comportement en tapant :
- sudo systemctl disable httpd
Pour réactiver le service au démarrage, tapez :
- sudo systemctl enable httpd
Apache démarre automatiquement lorsque le serveur redémarre.
La configuration par défaut d’Apache permettra à votre serveur d’héberger un seul site Web. Si vous prévoyez d’héberger plusieurs domaines sur votre serveur, vous devrez configurer des hôtes virtuels sur votre serveur Web Apache.
Étape 4 – Configuration des hôtes virtuels (Recommandée)
Lorsque vous utilisez le serveur Web Apache, vous pouvez utiliser des hôtes virtuels (similaires aux blocs de serveur dans Nginx) pour encapsuler les détails de configuration et héberger plus d’un domaine à partir d’un seul serveur. Dans cette étape, vous allez configurer un domaine appelé example.com
, mais vous devez le remplacer par votre propre nom de domaine. Pour en savoir plus sur la configuration d’un nom de domaine avec DigitalOcean, consultez notre Introduction au DNS DigitalOcean.
Apache sur CentOS 7 a un bloc de serveur activé par défaut qui est configuré pour servir des documents à partir du répertoire /var/www/html
. Bien que cela fonctionne bien pour un seul site, cela peut devenir lourd si vous hébergez plusieurs sites. Au lieu de modifier /var/www/html
, vous allez créer une structure de répertoires dans /var/www
pour le site example.com
, en laissant /var/www/html
en place comme répertoire par défaut à servir si une demande client ne correspond à aucun autre site.
Créez le répertoire html
pour example.com
comme suit, en utilisant l’indicateur -p
pour créer tous les répertoires parents nécessaires :
- sudo mkdir -p /var/www/example.com/html
Créez un répertoire supplémentaire à stocker fichiers journaux pour le site :
- sudo mkdir -p /var/www/example.com/log
Ensuite, attribuez la propriété du répertoire html
avec la variable d’environnement $USER
:
- sudo chown -R $USER:$USER /var/www/example.com/html
Assurez-vous que votre racine Web a la valeur par défaut ensemble d’autorisations:
- sudo chmod -R 755 /var/www
Next, create a sample index.html
page using vi
or your favorite editor:
- sudo vi /var/www/example.com/html/index.html
Press i
to switch to INSERT
mode and add the following sample HTML to the file:
<html> <head> <title>Welcome to Example.com!</title> </head> <body> <h1>Success! The example.com virtual host is working!</h1> </body></html>
Save and close the file by pressing ESC
, typing :wq
, and pressing ENTER
.
Avec votre répertoire de site et votre exemple de fichier d’index en place, vous êtes presque prêt à créer les fichiers d’hôte virtuel. Les fichiers d’hôte virtuel spécifient la configuration de vos sites distincts et indiquent au serveur Web Apache comment répondre aux différentes demandes de domaine.
Avant de créer vos hôtes virtuels, vous devrez créer un répertoire sites-available
dans lequel les stocker. Vous allez également créer le répertoire sites-enabled
qui indique à Apache qu’un hôte virtuel est prêt à servir aux visiteurs. Le répertoire sites-enabled
contiendra des liens symboliques vers des hôtes virtuels que nous voulons publier. Créez les deux répertoires avec la commande suivante :
- sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
Ensuite, vous direz à Apache de rechercher des hôtes virtuels dans le répertoire sites-enabled
. Pour ce faire, éditez le fichier de configuration principal d’Apache et ajoutez une ligne déclarant un répertoire optionnel pour les fichiers de configuration supplémentaires :
- sudo vi /etc/httpd/conf/httpd.conf
Ajoutez cette ligne à la fin du fichier:
IncludeOptional sites-enabled/*.conf
Enregistrez et fermez le fichier lorsque vous avez terminé d’ajouter cette ligne. Maintenant que vous avez vos répertoires d’hôtes virtuels en place, vous allez créer votre fichier d’hôte virtuel.
Commencez par créer un nouveau fichier dans le répertoire sites-available
:
- sudo vi /etc/httpd/sites-available/example.com.conf
Ajoutez le bloc de configuration suivant et remplacez le domaine example.com
par votre nom de domaine :
<VirtualHost *:80> ServerName www.example.com ServerAlias example.com DocumentRoot /var/www/example.com/html ErrorLog /var/www/example.com/log/error.log CustomLog /var/www/example.com/log/requests.log combined</VirtualHost>
Cela indiquera à Apache où trouver directement la racine qui contient les documents Web accessibles au public. Il indique également à Apache où stocker les journaux d’erreurs et de demandes pour ce site particulier.
Enregistrez et fermez le fichier lorsque vous avez terminé.
Maintenant que vous avez créé les fichiers d’hôte virtuel, vous allez les activer pour qu’Apache sache les servir aux visiteurs. Pour ce faire, créez un lien symbolique pour chaque hôte virtuel dans le répertoire sites-enabled
:
- sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf
Votre hôte virtuel est maintenant configuré et prêt à diffuser du contenu. Avant de redémarrer le service Apache, nous allons nous assurer que SELinux a les bonnes stratégies en place pour vos hôtes virtuels.
Étape 5 – Réglage des autorisations SELinux pour les hôtes virtuels (Recommandé)
SELinux est configuré pour fonctionner avec la configuration Apache par défaut. Puisque vous configurez un répertoire de journal personnalisé dans le fichier de configuration des hôtes virtuels, vous recevrez une erreur si vous tentez de démarrer le service Apache. Pour résoudre ce problème, vous devez mettre à jour les stratégies SELinux pour permettre à Apache d’écrire dans les fichiers nécessaires. SELinux apporte une sécurité accrue à votre environnement CentOS 7, il n’est donc pas recommandé de désactiver complètement le module du noyau.
Il existe différentes façons de définir des stratégies en fonction des besoins de votre environnement, car SELinux vous permet de personnaliser votre niveau de sécurité. Cette étape couvrira deux méthodes d’ajustement des stratégies Apache : universellement et sur un répertoire spécifique. L’ajustement des stratégies sur les répertoires est plus sécurisé et constitue donc l’approche recommandée.
Ajuster les stratégies Apache Universellement
Définir la stratégie Apache universellement indiquera à SELinux de traiter tous les processus Apache de manière identique en utilisant le booléen httpd_unified
. Bien que cette approche soit plus pratique, elle ne vous donnera pas le même niveau de contrôle qu’une approche axée sur une stratégie de fichier ou de répertoire.
Exécutez la commande suivante pour définir une stratégie Apache universelle :
- sudo setsebool -P httpd_unified 1
La commande setsebool
modifie les valeurs booléennes SELinux. L’indicateur -P
mettra à jour la valeur du temps de démarrage, ce qui fera que cette modification persistera lors des redémarrages. httpd_unified
est le booléen qui dira à SELinux de traiter tous les processus Apache comme le même type, donc vous l’avez activé avec une valeur de 1
.
Ajuster les stratégies Apache sur un répertoire
Définir individuellement les autorisations SELinux pour le répertoire /var/www/example.com/log
vous donnera plus de contrôle sur vos stratégies Apache, mais peut également nécessiter plus de maintenance. Étant donné que cette option ne définit pas de stratégies universelles, vous devrez définir manuellement le type de contexte pour tous les nouveaux répertoires de journaux spécifiés dans vos configurations d’hôte virtuel.
Tout d’abord, vérifiez le type de contexte que SELinux a donné au répertoire /var/www/example.com/log
:
- sudo ls -dZ /var/www/example.com/log/
Cette commande répertorie et imprime le contexte SELinux du répertoire. Vous verrez une sortie similaire à ce qui suit:
Outputdrwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/example.com/log/
Le contexte actuel est httpd_sys_content_t
, ce qui indique à SELinux que le processus Apache ne peut lire que les fichiers créés dans ce répertoire. Dans ce tutoriel, vous allez changer le type de contexte du répertoire /var/www/example.com/log
en httpd_log_t
. Ce type permettra à Apache de générer et d’ajouter des fichiers journaux d’applications Web :
- sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"
Ensuite, utilisez la commande restorecon
pour appliquer ces modifications et les faire persister lors des redémarrages:
- sudo restorecon -R -v /var/www/example.com/log
L’indicateur -R
exécute cette commande récursivement, ce qui signifie qu’elle mettra à jour tous les fichiers existants pour utiliser le nouveau contexte. L’indicateur -v
affichera les modifications de contexte de la commande effectuée. Vous verrez la sortie suivante confirmant les modifications :
Outputrestorecon reset /var/www/example.com/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0
Vous pouvez lister les contextes une fois de plus pour voir les modifications :
- sudo ls -dZ /var/www/example.com/log/
La sortie reflète le type de contexte mis à jour:
Outputdrwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/example.com/log
Maintenant que le répertoire /var/www/example.com/log
utilise le type httpd_log_t
, vous êtes prêt à tester la configuration de votre hôte virtuel.
Étape 6 – Test de l’hôte virtuel (Recommandé)
Une fois que le contexte SELinux a été mis à jour avec l’une ou l’autre méthode, Apache pourra écrire dans le répertoire /var/www/example.com/log
. Vous pouvez maintenant redémarrer le service Apache avec succès :
- sudo systemctl restart httpd
Listez le contenu du répertoire /var/www/example.com/log
pour voir si Apache a créé les fichiers journaux:
- ls -lZ /var/www/example.com/log
Vous verrez qu’Apache a été capable de créer les fichiers error.log
et requests.log
spécifiés dans la configuration de l’hôte virtuel :
Output-rw-r--r--. 1 root root 0 Feb 26 22:54 error.log-rw-r--r--. 1 root root 0 Feb 26 22:54 requests.log
Maintenant que vous après la configuration de votre hôte virtuel et la mise à jour des autorisations SELinux, Apache servira désormais votre nom de domaine. Vous pouvez tester cela en naviguant vers http://example.com
, où vous devriez voir quelque chose comme ceci:
Cela confirme que votre hôte virtuel est correctement configuré et diffuse du contenu. Répétez les étapes 4 et 5 pour créer de nouveaux hôtes virtuels avec des autorisations SELinux pour des domaines supplémentaires.
Conclusion
Dans ce tutoriel, vous avez installé et géré le serveur web Apache. Maintenant que votre serveur Web est installé, vous disposez de nombreuses options pour le type de contenu que vous pouvez diffuser et les technologies que vous pouvez utiliser pour créer une expérience plus riche.
Si vous souhaitez créer une pile d’applications plus complète, vous pouvez consulter cet article sur la configuration d’une pile de LAMPES sur CentOS 7.