Serveur Web Apache2
— Serveur Web —
Certificats SSL Web | .htaccess | Authentification par carte à puce | Certificats Let's Encrypt
Archives : Ancien article sur Apache2 | Module Whois | ProFTPd
Architecture & Organisation
Pour chaque site web hébergé sur le serveur web, il faudra systématiquement créer et référencer :
- 1 compte d’accès SFTP
- 1 hôte virtuel Apache2 (VHost)
- 1 certificat électronique SSL
- 1 nom de domaine
- 1 base de données SQL
- Chaque site web dispose d’un répertoire web à la racine :
/var/www
- Le nom du répertoire du site web reprend son nom de site (FQDN) ainsi que la version de développement du site :
/var/www/exemple/2.5.0/
- S'il s'agit de sites intranets, les certificats pour les sites web nécessitant une connexion SSL sont stockés dans le répertoire :
/etc/ssl/private
- Et sont nommés tel que définit :
- site1.domaine.tld.key : fichier de clé privé pour le site exemple.
- site1.domaine.tld.csr : fichier de demande de certificat pour le site exemple.
- site1.domaine.tld.crt : certificat SSL pour le site exemple.
- Le cas échéant, le programme certbot sera utilisé pour générer des certificats Let's Encrypt.
Gestion des comptes SFTP
|
Un compte SFTP permet de se connecter au système de fichiers du serveur web de manière sécurisée. Utiliser un client comme Filezilla pour vous connecter en SFTP. |
Création d’un utilisateur SFTP
- Création de l’utilisateur UNIX exemple :
|
|
- Affectation de l’utilisateur au groupe UNIX SFTP :
|
|
Changer le mot de passe d’un compte SFTP
- Pour réinitialiser ou mettre à jour le mot de passe d’un compte SFTP, utiliser la commande passwd.
|
|
Supprimer un compte SFTP
- Dissocier l’utilisateur du groupe SFTP :
|
|
- Supprimer le compte utilisateur :
|
|
Préparation du dossier web
Création du répertoire web
- Depuis la racine /var/www/ créer le répertoire de l’application nommé par le nom du site :
|
|
- Ensuite, créer un sous-répertoire correspondant à la version courante de l’application :
|
|
Définition des permissions d’accès
- Affecter l’utilisateurs exemple à la racine /var/www/exemple :
|
|
- Autoriser les droits rwx pour le propriétaire et rx pour tous les utilisateurs sur le répertoire :
|
|
Création de l’hôte virtuel (Vhost)
Création du Vhost http
- Depuis la racine /etc/apache2/site-available, créer le fichier exemple.domaine.tld.conf et y insérer / adapter les lignes suivantes :
<VirtualHost *:80> DocumentRoot /var/www/exemple.domaine.tld ServerName exemple.domaine.tld ErrorLog ${APACHE_LOG_DIR}/exemple.domaine.tld_error.log CustomLog ${APACHE_LOG_DIR}/exemple.domaine.tld_access.log combined <Directory /var/www/exemple.domaine.tld> allow from all AllowOverride all Options +Indexes </Directory> </VirtualHost>
- Activation de l’hôte virtuel exemple.domaine.tld :
|
|
- Redémarrer le service Apache2 pour prendre en compte les modifications :
|
|
- Le site web est dès à présent accessible depuis l’url : http://exemple.domaine.tld.
Si la résolution DNS ne fonctionne pas, assurez-vous d'avoir correctement déclarés vos enregistrements DNS. Pour de plus amples informations, vous pouvez vous référer à cette article Création d'une zone DNS sur Bind9 |
Création du Vhost https
Avec un certificat provenant d'une AC
Vous devez disposer d'un certificat (fichier .cert ou .crt) et de sa clé privée (fichier .key). Si ce n'est pas le cas, reporter-vous à l'article Certificats_SSL_Web. |
- Depuis la racine /etc/apache2/site-available, créer le fichier exemple.domaine.tld.conf et y insérer / adapter les lignes suivantes :
<VirtualHost *:80> DocumentRoot /var/www/exemple.domaine.tld ServerName exemple.domaine.tld ErrorLog ${APACHE_LOG_DIR}/exemple.domaine.tld_error.log CustomLog ${APACHE_LOG_DIR}/exemple.domaine.tld_access.log combined <Directory /var/www/exemple.domaine.tld> allow from all AllowOverride all Options +Indexes </Directory> </VirtualHost> <VirtualHost *:443> DocumentRoot /var/www/exemple.domaine.tld ServerName exemple.domaine.tld ErrorLog ${APACHE_LOG_DIR}/exemple.domaine.tld_error.log CustomLog ${APACHE_LOG_DIR}/exemple.domaine.tld_access.log combined <Directory /var/www/exemple.domaine.tld> allow from all AllowOverride all Options +Indexes </Directory> SSLEngine on SSLCertificateFile /etc/ssl/private/exemple.domaine.tld.crt SSLCertificateKeyFile /etc/ssl/private/exemple.domaine.tld.key </VirtualHost>
- Activation de l’hôte virtuel exemple.domaine.tld :
|
|
- Redémarrer le service Apache2 pour prendre en compte les modifications :
|
|
- Le site web est dès à présent accessible depuis l’url : https://exemple.domaine.tld.
Création du pool PHP
|
Les pools permettent de contrôler les droits et les ressources utilisés pour chaque VHost hébergés sur le serveur. |
- Créer le fichier de configuration /etc/php/8.2/fpm/pool.d/exemple.conf et y adapter/coller les lignes suivantes :
[exemple] user = exemple group = exemple listen = /run/php/php8.2-fpm.exemple.sock listen.owner = exemple listen.group = www-data pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3
- Redémarrer le service pour prendre en compte les nouveaux paramètres :
|
|
Version spécifique de PHP
|
Certaines applications web nécessitent une version spécifique de PHP pour fonctionner. Si tel est le cas, voici la procédure à suivre pour forcer sur un vhost spécifique une version de PHP donnée. |
- Editer le fichier de configuration du VHost du site pour lequel la version de PHP doit être modifiée. Juste avant la balise :
</VirtualHost>
- Ajouter les éléments suivants :
<FilesMatch \.php$> SetHandler "proxy:unix:/run/php/php8.2-fpm.exemple.sock|fcgi://localhost" </FilesMatch>
- Remplacer php8.2 par la version de PHP souhaitée.
- Un redémarrage du service Apache2 est nécessaire pour la bonne prise en compte des paramètres :
|
|
Changer l’utilisateur du processus Apache
|
Dans le cas d’une configuration d’un VHost, le processus apache doit fonctionner avec l’utilisateur assigné au VHost. |
- Editer le fichier de configuration du VHost du site pour lequel la version de PHP doit être modifiée. Juste avant la balise :
</VirtualHost>
- Ajouter les éléments suivants :
<IfModule mpm_itk_module> AssignUserId exemple exemple </IfModule>
- Un redémarrage du service Apache2 est nécessaire pour la bonne prise en compte des paramètres :
|
|
Création de l'hôte virtuel proxy reverse
Création du Vhost http
- Pour illustrer cette exemple, nous souhaitons relayer les requêtes arrivants sur le serveur Apache2 depuis l'hôte virtuel proxy.domaine.tld sur le port 80 vers le serveur destination.domaine.tld sur le port 8080.
proxy.domaine.tld:80 -------------------------------> destination.domaine.tld:8080
- Depuis la racine /etc/apache2/sites-available/, créer le fichier rev-proxy.domaine.tld.conf et y insérer / adapter les lignes suivantes :
ProxyRequests Off RewriteEngine on SSLProxyEngine on SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off <VirtualHost *:80> ServerName proxy.domaine.tld ErrorLog ${APACHE_LOG_DIR}/rev-proxy.domaine.tld_error.log CustomLog ${APACHE_LOG_DIR}/rev-proxy.domaine.tld_access.log combined ProxyPreserveHost On ProxyVia Full RequestHeader edit Transfer-Encoding Chunked chunked early RequestHeader unset Accept-Encoding CheckSpelling On TimeOut 1800 ProxyPass / http://destination.domaine.tld:8080/ ProxyPassReverse / http://destination.domaine.tld:8080/ </VirtualHost>
- Activation de l’hôte virtuel exemple.domaine.tld :
|
|
- Redémarrer le service Apache2 pour prendre en compte les modifications :
|
|
- Le site web est dès à présent accessible depuis l’url : http://proxy.domaine.tld.
Si la résolution DNS ne fonctionne pas, assurez-vous d'avoir correctement déclarés vos enregistrements DNS. Pour de plus amples informations, vous pouvez vous référer à cette article Création d'une zone DNS sur Bind9 |
Création du Vhost https
Avec un certificat provenant d'une AC
Vous devez disposer d'un certificat (fichier .cert ou .crt) et de sa clé privée (fichier .key). Si ce n'est pas le cas, reporter-vous à l'article Certificats_SSL_Web. |
- Pour illustrer cette exemple, nous souhaitons relayer les requêtes arrivants sur le serveur Apache2 depuis l'hôte virtuel proxy.domaine.tld sur le port 443 vers le serveur destination.domaine.tld sur le port 8443.
proxy.domaine.tld:443 -------------------------------> destination.domaine.tld:8443
- Depuis la racine /etc/apache2/sites-available/, créer le fichier rev-proxy.domaine.tld.conf et y insérer / adapter les lignes suivantes :
ProxyRequests Off RewriteEngine on SSLProxyEngine on SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off <VirtualHost *:80> DocumentRoot /var/www/proxy.domaine.tld ServerName proxy.domaine.tld ErrorLog ${APACHE_LOG_DIR}/rev-proxy.domaine.tld_error.log CustomLog ${APACHE_LOG_DIR}/rev-proxy.domaine.tld_access.log combined <Directory /var/www/proxy.domaine.tld> allow from all AllowOverride all Options +Indexes </Directory> </VirtualHost> <VirtualHost *:443> DocumentRoot /var/www/proxy.domaine.tld ServerName proxy.domaine.tld ErrorLog ${APACHE_LOG_DIR}/rev-proxy.domaine.tld_error.log CustomLog ${APACHE_LOG_DIR}/rev-proxy.domaine.tld_access.log combined <Directory /var/www/proxy.domaine.tld> allow from all AllowOverride all Options +Indexes </Directory> ProxyPreserveHost On ProxyVia Full RequestHeader edit Transfer-Encoding Chunked chunked early RequestHeader unset Accept-Encoding CheckSpelling On TimeOut 1800 ProxyPass / https://destination.domaine.tld:8443/ ProxyPassReverse / https://destination.domaine.tld:8443/ SSLEngine on SSLCertificateFile /etc/ssl/private/proxy.domaine.tld.crt SSLCertificateKeyFile /etc/ssl/private/proxy.domaine.tld.key </VirtualHost>
- Activation de l’hôte virtuel proxy.domaine.tld :
|
|
- Redémarrer le service Apache2 pour prendre en compte les modifications :
|
|
- Le site web est dès à présent accessible depuis l’url : https://proxy.domaine.tld.