NOTE: Les exemples de ce document utilisent la syntaxe de la version 2.4 d’Apache2
Apache2 est un serveur web open-source largement reconnu, développé par la Fondation Apache. Il constitue un pilier essentiel de l’infrastructure Internet, permettant l’hébergement et la diffusion de contenus via les protocoles HTTP et HTTPS.
Sa popularité réside dans sa flexibilité et son extensibilité, grâce à une architecture modulaire qui permet l’intégration de diverses fonctionnalités supplémentaires, telles que la gestion des scripts PHP, le chiffrement via SSL/TLS, et bien d’autres.
En outre, Apache2 est compatible avec une large gamme de systèmes d’exploitation, y compris Linux, Windows, et macOS, ce qui en fait une solution versatile et robuste pour un large éventail de déploiements web.
Il existe plusieurs alternatives à Apache2 pour servir des sites web, chacune ayant ses propres caractéristiques et avantages selon les besoins spécifiques. Parmi les plus courantes, on peut citer :
Avoir accès à un serveur Ubuntu à jour.
sudo apt update && sudo apt upgrade -y
À partir d’un serveur Ubuntu;
sudo apt installer apache2 -y # NOTE: Voici comment vérifier les versions disponibles sur les dépôts: $ apt-cache policy apache2 apache2: Installed: 2.4.58-1ubuntu8.4 Candidate: 2.4.58-1ubuntu8.4 Version table: *** 2.4.58-1ubuntu8.4 500 500 http://ca.archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages 500 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages 100 /var/lib/dpkg/status 2.4.58-1ubuntu8 500 500 http://ca.archive.ubuntu.com/ubuntu noble/main amd64 Packages # Et installer une version spécifique: $ sudo apt install apache2=2.4.58-1ubuntu8.4
Dans un fureteur, inscrire l’adresse IP du serveur Ubuntu.
Par exemple,
Emplacement des Fichiers Web :
Le répertoire /var/www
est généralement utilisé comme l’emplacement par défaut pour stocker les fichiers web d’un serveur Apache2. C’est là que sont placés les fichiers HTML, CSS, JavaScript, les images, et autres ressources nécessaires pour servir les pages web aux clients.
Structure Typique :
/var/www/html
: C’est le répertoire du premier site Web d’Apache2. Ce dossier est le répertoire racine du site web par défaut./var/www/site1
et /var/www/site2
pour différents sites. Voir le document sur les hôte virtuels (vhosts). ┌──[19:47:02]─[0]─[serveur01:/home/etudiant] └──| ls /var/www/html/ -l -rw-r--r-- 1 root root 10671 Aug 30 22:51 index.html
┌──[13:23:28]─[0]─[serveur01:/etc/apache2] └──| ls -Al total 84 -rw-r--r-- 1 root root 7494 Sep 3 19:46 apache2.conf # Configuration globale d'Apache2 drwxr-xr-x 2 root root 4096 Aug 30 22:51 conf-available # Configuration supplémentaire drwxr-xr-x 2 root root 4096 Aug 30 22:51 conf-enabled # a2enconf, a2disconf -rw-r--r-- 1 root root 1782 Mar 18 11:41 envvars # Variables d'environnement, APACHE_RUN_USER=www-data, ... -rw-r--r-- 1 root root 31063 Mar 18 11:41 magic # Définition des MIME drwxr-xr-x 2 root root 12288 Aug 30 22:51 mods-available # Modules disponible drwxr-xr-x 2 root root 4096 Sep 3 19:44 mods-enabled # a2enmod, a2dismod -rw-r--r-- 1 root root 287 Aug 30 23:42 ports.conf # Ports IP écoutés par apache2, 80, 443, ... drwxr-xr-x 2 root root 4096 Sep 3 19:19 sites-available # Sites disponibles - Hôtes virtuels drwxr-xr-x 2 root root 4096 Aug 30 22:51 sites-enabled # a2ensite, a2dissite
# This is the main Apache server configuration file. It contains the # configuration directives that give the server its instructions. # Do NOT add a slash at the end of the directory path. # #ServerRoot "/etc/apache2" # # Timeout: The number of seconds before receives and sends time out. # Timeout 300 # KeepAlive: Whether or not to allow persistent connections # KeepAlive On # These need to be set in /etc/apache2/envvars User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP} ErrorLog ${APACHE_LOG_DIR}/error.log # LogLevel: Control the severity of messages logged to the error_log. # Available values: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. LogLevel warn # Include module configuration: IncludeOptional mods-enabled/*.load IncludeOptional mods-enabled/*.conf # Include list of ports to listen on Include ports.conf # Sets the default security model of the Apache2 HTTPD server. # NOTE: Il ne sera pas possible pour le serveur Apache2 d'avoir accès aux dossiers # à l'extérieure de ceux définis ici: <Directory /> Options FollowSymLinks AllowOverride None Require all denied </Directory> <Directory /usr/share> AllowOverride None Require all granted </Directory> <Directory /var/www/> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory> # AccessFileName: The name of the file to look for in each directory # for additional configuration directives. See also the AllowOverride # directive. AccessFileName .htaccess # The following lines prevent .htaccess and .htpasswd files from being # viewed by Web clients. <FilesMatch "^\.ht"> Require all denied </FilesMatch> # Include generic snippets of statements IncludeOptional conf-enabled/*.conf # Include the virtual host configurations: IncludeOptional sites-enabled/*.conf
# If you just change the port or add more ports here, you will likely also # have to change the VirtualHost statement in # /etc/apache2/sites-enabled/000-default.conf Listen 80 # Listen autre_port <IfModule ssl_module> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule>
# NOTE: Les variables d'environnement d'Apache ne sont disponibles que durant une session apache2. # Pour les consulter, il faut explicitement les charger: $ source /etc/apache2/envvars $ env | grep APACHE APACHE_LOG_DIR=/var/log/apache2 APACHE_PID_FILE=/var/run/apache2/apache2.pid APACHE_RUN_GROUP=www-data APACHE_LOCK_DIR=/var/lock/apache2 APACHE_RUN_DIR=/var/run/apache2 APACHE_RUN_USER=www-data
Le module mod_authz_core
met à disposition des fournisseurs d’autorisation génériques utilisables avec la directive Require
.
Le fournisseur all
accepte un argument dont les deux valeurs possibles sont : ‘granted‘ ou ‘denied‘. Les exemples suivants autorisent ou interdisent l’accès à toutes les requêtes.
Exemples d’utilisation:
// Accès à toutes le ressources du dossier suivant: <Directory /var/www/html> Require all granted </Directory> // Aucun accès aux ressources du dossier suivant: <Directory /> Require all denied </Directory>
Les clients dont les adresses IP font partie des tranches spécifiées auront accès à la ressource.
Exemples d’utilisation:
<Directory /var/www/html/dossiers_internes> Require ip 10.10 172.20 192.168 </Directory> <Directory /var/www/html/externe_seulement> Require not ip 192.168 </Directory>
Le fichier 000-default.conf contient les paramètres de configuration du site web par défaut. Les fichiers de contenu de ce site web sont situés à /var/www/html. Ces paramètres ont préséances sur ceux du fichier /etc/apache2/apache2.conf.
Voici son contenu de départ:
# Configuration de départ du site web par défaut <VirtualHost *:80> #ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
# Consultation du journal d'apache2 sudo tail -f /var/log/apache2/access.log # -f = output appended data as the file grows
<VirtualHost *:80> #ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html <Directory /var/www/html> Options -Indexes AllowOverride None Require all granted </Directory> <Directory /var/www/html/documents> Options +Indexes AllowOverride None Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Il faut modifier la configuration du site web par défaut, pour que le contenu Web soit publié à partir du dossier /la_cie_abc/public_html – (ATTENTION, Il faut créer cette structure à la racine du système de fichiers)
1 – Créer deux fichiers dans ce dossier:
2 – Il ne faut pas permettre l’affichage du contenu du dossier dans le fureteur.
3 – Créer le dossier /la_cie_abc/public_html/documents
4 – Créer les trois fichiers suivants dans le dossier documents:
5 – Il faut permettre l’affichage du contenu du dossier documents dans le fureteur.
6 – Permettre l’accès au site web par le port IP 8080. Par exemple, http://192.168.c.d:8080/page.html
INDICE: Par défaut, Apache2 ne permet pas la publication de documents Web à l’extérieur du dossier /var/www ou l’écoute sur des ports IP autres que 80 et 443. Il faut permettre ces accès via les fichiers apache2.conf et ports.conf . Après modification, il faudra relancer apache2 : sudo systemctl restart apache2.
Apache2 permet aux utilisateurs du système de publier un site web personnel.
Le site sera accessible via une URL de se format:
http://192.168.2.214/~etudiant/
Étape 1 – Activer le module ‘userdir‘
sudo a2enmod userdir
Voir le fichier: /etc/apache2/mods-available/userdir.conf
UserDir public_html UserDir disabled root <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Indexes Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS </Directory>
Étape 2 – L’utilisateur doit placer son contenu web dans le dossier ‘~/public_html‘
Référence: AllowOverride: FileInfo, AuthConfig, Limit, Indexes
Étape 3 – L’utilisateur ‘www-data‘ dit être membre du groupe de l’utilisateur qui désire publier sur le Web.
usermod -a -G etudiant www-data
Apache2 propose une méthode pour personnaliser les messages d’erreur Web. Par exemple, lors d’une requête sur une adresse invalide, au lieu du message:
404 - Not Found
Il est possible d’afficher un page personnalisée comme,
Ceci sera obtenu grace à la directrice ‘ErrorDocument’. Voici des exemples:
ErrorDocument 500 http://example.com/cgi-bin/server-error.cgi ErrorDocument 404 /errors/bad_urls.php ErrorDocument 401 /subscription_info.html ErrorDocument 403 "Sorry can't allow you access today" ErrorDocument 403 Forbidden! ErrorDocument 403 /errors/forbidden.py?referrer=%{escape:%{HTTP_REFERER}} # Retour au message d'origine: <Directory "/web/docs"> ErrorDocument 404 default </Directory>
Étape 1 – Ajouter le code suivant au fichier 000-default.conf
# Sous DocumentRoot ErrorDocument 404 https://ve2cuy.com/420-3c3/?page_id=2210 # Enregistrer, recharger (systemctl reload) et tester!
Étape 2 – Ajouter le code suivant à la section documents
<Directory /var/www/html/documents> ... ErrorDocument 404 default </Directory> # Enregistrer, recharger (systemctl) et tester!
Les balises RequireAny, RequireAll er RequireNone permettent de regrouper plusieurs directives.
<RequireAny> Require ip 192.168 Require ip 10.10 Require ip 2a02:4126:2aa4::/48 </RequireAny> <Files adminer.php> <RequireAny> Require local Require ip 192.168 Require ip 10 </RequireAny> </Files> # NOTE: Dans le cas d'une négation, il faut utilise la formule 'Tout sauf' <RequireAll> Require all granted Require not ip 111.111.111.111 Require not ip 222.222.222.222 Require not ip 123.123.123.123 </RequireAll> <RequireNone> # Si une ou plusieurs directives contenues dans cette directive retournent un résultat positif alors la directive RequireNone échouera. </RequireNone>
Le document est disponible ici.
FIN DU DOCUMENT