Serveur Web Apache2

De NCad Wiki
Aller à la navigation Aller à la recherche

Serveur Web

Installation d'Apache2 Paramétrage courant

Certificats SSL Web | .htaccess | Authentification par carte à puce | Certificats Let's Encrypt


Archives : Ancien article sur Apache2 | Module Whois | ProFTPd


Note de version

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 :

root@apache2:~# adduser exemple

  • Affectation de l’utilisateur au groupe UNIX SFTP :

root@apache2:~# addgroup exemple sftp
root@apache2:~# addgroup exemple www-data

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.

root@apache2:~# passwd exemple
Nouveau mot de passe : ********
Retapez le nouveau mot de passe : ********
passwd: password updated successfully

Supprimer un compte SFTP

  • Dissocier l’utilisateur du groupe SFTP :

root@apache2:~# delgroup exemple sftp
Suppression de l'utilisateur « exemple » du groupe « sftp »... Fait.

  • Supprimer le compte utilisateur :

root@apache2:~# deluser exemple
Suppression de l'utilisateur « exemple »...
Attention ! Le groupe « exemple » ne contient plus aucun membre.
Fait.

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 :

root@apache2:~# mkdir /var/www/exemple

  • Ensuite, créer un sous-répertoire correspondant à la version courante de l’application :

root@apache2:~# mkdir /var/www/exemple/2.5.0

Définition des permissions d’accès

  • Affecter l’utilisateurs exemple à la racine /var/www/exemple :

root@apache2:~# chown exemple /var/www/exemple

  • Autoriser les droits rwx pour le propriétaire et rx pour tous les utilisateurs sur le répertoire :

root@apache2:~# chmod 755 /var/www/exemple -R

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 :

root@apache2:~$ a2ensite exemple.domaine.tld.conf

  • Redémarrer le service Apache2 pour prendre en compte les modifications :

root@apache2:~$ service apache2 restart


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 :

root@apache2:~$ a2ensite exemple.domaine.tld.conf

  • Redémarrer le service Apache2 pour prendre en compte les modifications :

root@apache2:~$ service apache2 restart

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 :

root@apache2:~# /etc/init.d/php8.2-fpm restart

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 :

root@apache2:~# /etc/init.d/apache2 restart

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 :

root@apache2:~# /etc/init.d/apache2 restart

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 :

root@apache2:~$ a2ensite rev-proxy.domaine.tld.conf

  • Redémarrer le service Apache2 pour prendre en compte les modifications :

root@apache2:~$ service apache2 restart


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 :

root@apache2:~$ a2ensite proxy.domaine.tld.conf

  • Redémarrer le service Apache2 pour prendre en compte les modifications :

root@apache2:~$ service apache2 restart