Blog ENI : Toute la veille numérique !
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
  1. Livres et vidéos
  2. Installation et configuration d'un serveur internet
  3. Serveur web (Apache/Nginx)
Extrait - Installation et configuration d'un serveur internet (BIND, Apache, Nginx, Dovecot, Postfix...)
Extraits du livre
Installation et configuration d'un serveur internet (BIND, Apache, Nginx, Dovecot, Postfix...)
3 avis
Revenir à la page d'achat du livre

Serveur web (Apache/Nginx) - Base

Introduction

Le serveur web est le logiciel qui rend accessibles les sites web en écoutant sur les ports 80 et 443 et en servant les fichiers dans certains répertoires en réponse aux requêtes sur ces ports. Le port 80 est le port par défaut pour le HTTP (en anglais : Hypertext Transfer Protocol, protocole de transfert hypertexte), et le port 443 l’est pour la variante chiffrée HTTPS (la lettre S signifiant secure, ou sécurisé en français). Bien que les serveurs web puissent être configurés pour accepter des requêtes sur d’autres ports, sans indication de port explicite, un client tel qu’un navigateur ou un robot de recherche enverra respectivement ses requêtes HTTP et HTTPS aux ports 80 et 443. Si l’utilisateur ne spécifie pas de protocole, la majorité des clients sélectionnera le HTTP.

La configuration décrite dans ce livre assure que toutes les requêtes sur le port 80 seront déroutées vers le port 443, donc que toutes les informations envoyées et reçues seront toujours chiffrées. Par contre, l’utilisation de la cryptographie et/ou du chiffrement est régulée ou interdite dans certaines parties du monde. L’administrateur système qui est lié par ces règlements peut facilement ajuster la configuration pour servir les sites web en forme non chiffrée ; les exemples de configurations donnés parlent d’eux-mêmes.

Les messages envoyés entre le client et le serveur web comportent deux composantes : les en-têtes (en anglais, singulier : header) et le corps (en anglais : body ou payload). Les en-têtes servent à la communication entre le client et le serveur web ; le corps d’une réponse du serveur au client contient...

Répertoire

Bien que tous les systèmes d’exploitation et tous les serveurs web semblent avoir leurs propres préférences pour le répertoire depuis lequel servir les sites web, ce livre suit le standard comme défini dans le Filesystem Hierarchy Standard (cf. chapitre Bref exposé d’Unix et de POSIX).

# mkdir -p /srv/www 

Dans ce répertoire, un sous-répertoire sera créé pour chaque site web à servir.

Pour empêcher l’accès non autorisé aux fichiers des sites web, il est recommandé de créer un utilisateur et un groupe destinés au développement des sites web et de rendre accessible le nouveau répertoire uniquement pour cet utilisateur et ce groupe. Évidemment, tous les développeurs web devront appartenir à ce groupe. Les exemples décrits dans ce livre partent du principe que cet utilisateur et ce groupe existent, et qu’ils s’appellent devweb tous les deux. Le répertoire /srv/www est le répertoire personnel de l’utilisateur devweb. Le chapitre Gestion des utilisateurs et des droits décrit comment créer des utilisateurs et des groupes.

# chown devweb:devweb /srv/www 
# chmod 0771 /srv/www 

Les permissions pour le répertoire sont 771, donnant tous les droits à l’utilisateur et au groupe, et accordant le droit d’exécution...

Apache

Apache est le plus ancien des deux serveurs web sélectionnés et a toujours été le standard de facto. Il est pratiquement impossible pour un administrateur de serveurs web de ne pas toucher à Apache, surtout dans les entreprises qui existent depuis quelque temps.

Le nom complet du serveur web est en fait Apache HTTP server. Le HTTP server est seulement un des plus de 200 projets gérés par The Apache Software Foundation.

1. Installation FreeBSD

Au moment de l’écriture de ce livre, Apache 2.4 est la seule version disponible sous FreeBSD.

freebsd# pkg search apache 
freebsd# pkg install apache24 

Les fichiers de configuration d’Apache sont installés dans le répertoire /usr/local/etc/apache24.

Apache n’est pas lancé automatiquement.

freebsd# service apache24 enable 
freebsd# service apache24 start 

Les modules Apache les plus importants sont installés avec Apache. Les noms des modules Apache commencent tous par mod_, donc la commande suivante peut servir à rechercher des modules supplémentaires :

freebsd# pkg src mod_ 

Si Apache a été installé à partir du catalogue de logiciels portés, la façon la plus pratique pour installer ou désinstaller des modules sera d’activer et désactiver les modules dans les paramètres d’installation d’Apache, et ensuite de réinstaller le serveur web.

freebsd# portsnap fetch update 
freebsd# cd /usr/ports/www/apache24 
freebsd# make config 
freebsd# make reinstall clean 

Après la réinstallation, Apache doit être redémarré.

2. Installation Debian

Sous Debian, Apache a été séparé en plusieurs paquets ; le nom est apache2 (ce 2 vient du numéro de version : 2.4).

debian# apt install apache2 apache2-data apache2-utils 

Les fichiers de configuration d’Apache sont installés dans le répertoire /etc/apache2.

Si aucun autre serveur web n’est activé, Apache est lancé automatiquement après l’installation.

Un grand nombre de modules est installé par défaut. La commande suivante sert à la recherche d’autres modules :

debian# apt search "libapache2-mod" 

Après l’installation ou la désinstallation des modules, Apache doit être...

Nginx

Nginx est sorti en 2004 et connaît une croissance énorme depuis. On estime que Nginx reprendra le statut de leader du marché d’Apache dans le courant de l’année 2020.

Comme Apache, Nginx peut aussi être enrichi de fonctionnalités supplémentaires à l’aide de modules.

1. Installation FreeBSD

Il existe plusieurs paquets Nginx. Le paquet nginx-full installe tous les modules disponibles.

freebsd# pkg search nginx 
freebsd# pkg install nginx-full 

Les fichiers de configuration de Nginx sont installés dans le répertoire /usr/local/etc/nginx.

Nginx n’est pas lancé automatiquement.

freebsd# service nginx enable 
freebsd# service nginx start 

2. Installation Debian

Debian a trois paquets Nginx différents : nginx-light, nginx-full et nginx-extras ; les différences s’affichent à l’aide de la commande apt show.

Le paquet nginx-full installe tous les modules disponibles.

debian# apt install nginx-full 

La configuration de Nginx est installée dans le répertoire /etc/nginx.

Si aucun autre serveur web n’est activé, Nginx sera lancé automatiquement après l’installation.

3. Installation CentOS

Nginx n’est pas disponible dans les dépôts de logiciels par défaut de CentOS ; avant que le serveur web puisse être installé, le Fedora EPEL (en anglais : Extra Packages for Enterprise Linux, paquets supplémentaires pour Linux d’entreprise) doit être ajouté. L’EPEL est un dépôt de logiciels proposant des paquets supplémentaires pour les distributions comme CentOS, Red Hat Enterprise Linux et Oracle Linux ; ce dépôt est entretenu par des bénévoles de la communauté Fedora.

centos# yum install epel-release 

Après l’ajout de l’EPEL, Nginx peut être installé. Le paquet nginx installe tous les modules comme des dépendances.

centos# yum install nginx 

La configuration de Nginx est installée dans le répertoire /etc/nginx.

Après l’installation, Nginx doit être lancé manuellement.

centos# systemctl enable nginx 
centos# systemctl start nginx 

4. Premier test

L’installation réussie, une première page web peut être requise à l’aide de Lynx sur la ligne...

mod_php

Un grand nombre de serveurs web Apache emploie le module Apache mod_php pour l’exécution des scripts PHP. Le module mod_php permet, pour ainsi dire, de charger l’interpréteur PHP directement dans le serveur web.

Par contre, le PHP-FPM qui sera abordé dans la section suivante apporte quelques avantages importants par rapport à mod_php, dont une utilisation de mémoire moins élevée (donc des sites web plus rapides) et la possibilité de faire exécuter les scripts PHP sous un autre nom d’utilisateur pour chaque site web (ce qui facilite la sécurité et la surveillance). De plus, mod_php n’existe que pour Apache ; les autres serveurs web utilisent déjà PHP_FPM.

Pour ces raisons, ce livre traite uniquement de la configuration de PHP-FPM, et non celle de mod_php.

L’administrateur système qui est prêt à remplacer mod_php par PHP-FPM trouvera quelques astuces à la fin de ce chapitre.

PHP-FPM

PHP-FPM signifie PHP FastCGI Process Manager (gestionnaire de processus FastCGI). FastCGI (en anglais : Fast Common Gateway Interface, interface de passerelle commune) est un protocole qui permet au serveur web d’exécuter des interpréteurs externes pour l’interprétation des scripts. PHP-FPM est une implémentation FastCGI qui a été développée spécifiquement pour PHP.

PHP-FPM est un daemon individuel qui attend des instructions du serveur web et qui exécute les instructions reçues. Le daemon lance un ou plusieurs pools, et chaque pool écoute sur une certaine adresse, qui peut être un socket TCP (adresse IP + port) ou un socket Unix. Chaque pool peut être exécuté sous un autre nom d’utilisateur et les pools peuvent être paramétrés séparément concernant les limites et journaux.

Comme PHP-FPM sait écouter sur un socket TCP, il est possible d’installer le serveur web et le PHP-FPM sur des serveurs séparés.

1. Installation FreeBSD

PHP-FPM fait partie de PHP ; l’interpréteur sera donc installé également.

Au moment de l’écriture de ce livre, PHP 7.4 est la version PHP la plus récente sous FreeBSD. PHP s’installe comme d’habitude.

freebsd# pkg search php 
freebsd# pkg install php74 
freebsd# service enable php-fpm 

2. Installation Debian

Sous Debian, PHP-FPM a été séparé dans un paquet qui dépend de PHP. Il existe deux paquets PHP-FPM : php7.0-fpm et php-fpm. Le premier installe explicitement la version PHP 7.0 et le deuxième installe la version la plus récente, qui sera mise à jour dès qu’une nouvelle version de PHP sera disponible dans les dépôts de logiciels Debian.

debian# apt search "php.*-fpm" 
debian# apt install php-fpm 

3. Installation CentOS

Sous CentOS, le paquet PHP-FPM s’appelle simplement php-fpm. Si le but n’est pas d’utiliser PHP en combinaison avec mod_php ou sur la ligne de commande, il est inutile d’installer le paquet php. La commande yum info montre que CentOS est le système le plus prudent, ou le plus conservateur, par rapport aux versions de PHP : la version disponible au moment de l’écriture de ce livre est 5.4.

centos#...

PHP

Puisque PHP-FPM est installé pour servir des scripts PHP, il est bon de parler brièvement de la configuration de l’interpréteur PHP. Par contre, ceci n’est pas un livre sur le développement des sites web ; le lecteur intéressé trouvera des informations plus approfondies dans d’autres livres et sur internet.

1. Configuration

Le fichier de configuration le plus important de PHP s’appelle php.ini. L’administrateur FreeBSD sélectionne un des deux fichiers d’exemple installés. Sous Debian sont également installés deux fichiers : l’un pour l’utilisation avec PHP-FPM et l’autre pour l’application cli de PHP. Sous CentOS, une seule version est installée. Jetons un coup d’œil sur le contenu de ce fichier, mais normalement il n’est pas vraiment nécessaire d’y modifier quelque chose ; ce fichier contient de la documentation vaste et claire.

freebsd# cp /usr/local/etc/php.ini-production \ 
           /usr/local/etc/php.ini 
freebsd# nano /usr/local/etc/php.ini 
 
debian# nano /etc/php/7.0/fpm/php.ini 
debian# nano /etc/php/7.0/cli/php.ini 
 
centos# nano /etc/php.ini 

Les extensions PHP, décrites dans la section suivante, ont chacune un fichier de configuration situé dans un répertoire...

Un premier hôte virtuel ou serveur virtuel

Le serveur héberge plusieurs noms de domaine et noms d’hôte ; cette technique s’appelle l’hébergement virtuel (en anglais : virtual hosting). Pour le serveur web, cela veut dire qu’il y a plusieurs sites web à servir ; Apache appelle un tel site web un hôte virtuel (en anglais : virtual host) et Nginx l’appelle un serveur virtuel (en anglais : virtual server).

Dans les sections suivantes, le site web par défaut sera créé, c’est-à-dire le site web qui sera affiché quand une requête arrive pour une adresse pour laquelle aucun site web n’a été créé explicitement. Il pourrait, par exemple, s’agir des requêtes pour les adresses http://vert.example.com/, http://198.51.100.156/, http://ns.example.com/ ou http://mx.example.com/, mais également http://www.example.com/ et http://www.example.edu/, tant que ces sites ne sont pas encore installés.

Une grande partie de ce qui est traité dans ces sections pourrait être transformée en scripts, ce qui peut être pratique en particulier sur les serveurs qui hébergent plusieurs sites web avec des configurations identiques. La création d’un tel script est laissée à l’administrateur système qui veut aller un peu plus loin.

1. DNS

Le premier pas pour la création d’un hôte virtuel ou d’un serveur virtuel est normalement la création du nom d’hôte dans le DNS. Cependant, comme il s’agit du site web par défaut, cela n’est pas nécessaire : ce site est créé pour les hôtes et les alias qui existent déjà dans le DNS, mais pour lesquels aucun site web n’a été créé explicitement.

2. Noms

Après la définition du nom d’hôte, les autres noms à utiliser peuvent être déduits de celui-ci. Comme il s’agit du site web par défaut, et que le nom du serveur est vert.example.com, les noms suivants seront utilisés :

Répertoire du site

/srv/www/vert.example.com

Fichier de configuration Apache/Nginx

000-vert.conf

Journal d’accès Apache/Nginx

/var/log/www-vert.log

Journal d’erreurs...

Passage de mod_php à PHP-FPM

Voici quelques conseils rapides pour l’administrateur système qui est prêt à passer de mod_php à PHP-FPM. Les administrateurs qui ne gèrent pas de serveurs web Apache avec le module mod_php peuvent sans risque sauter cette section.

Il n’est pas nécessaire de faire le changement pour tous les sites web en même temps : il est possible de faire la conversion site par site. Cela veut dire également qu’il est possible de faire une copie d’un site web existant, de la passer à PHP-FPM et de la tester, avant de la mettre en production.

Pour commencer, configurez un pool PHP-FPM pour le site, comme décrit plus tôt dans ce chapitre.

Attribuez le droit de lecture, et éventuellement le droit de modification, au pool PHP-FPM pour le répertoire du site web ; utilisez de préférence les ACL. Normalement, l’utilisateur Apache n’aura plus besoin du droit de modification pour le répertoire du site web.

Ajoutez les lignes suivantes à la configuration Apache pour l’hôte virtuel en question.

<FilesMatch "\.(php|php[57]|phtml)$"> 
    # Ne plus utiliser mod_php. 
    SetHandler None 
</FilesMatch> 
 
# Envoyer les fichiers PHP vers le PHP-FPM. 
# Ce peut être spécifié sur une seule...