Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
apache2 [Le 10/08/2025, 11:40] – ancienne révision (Le 20/07/2025, 14:14) restaurée bcag2apache2 [Le 11/11/2025, 14:43] (Version actuelle) – mise en forme / liens / localhost inaccessible -> démarrage impossible ? (éviter de documenter une erreur qu'on ne comprend pas ou demander avant svp) / détails / dokuwiki a des notes pour les "NOTA" / etc. krodelabestiole
Ligne 1: Ligne 1:
 {{tag>réseau serveur internet Focal}} {{tag>réseau serveur internet Focal}}
-{{ :logo:apache-logo.png?80nolink| Logo du logiciel Apache 2}} 
  
 +{{ :logo:apache-logo.png?80nolink|Logo du serveur Apache}}
 ====== Serveur HTTP Apache 2 ====== ====== Serveur HTTP Apache 2 ======
  
-Un [[wpfr>Serveur_HTTP|serveur HTTP]] permet à un site web de communiquer avec un navigateur en utilisant le protocole [[wpfr>Hypertext_Transfer_Protocol|HTTP(S)]] et ses extensions ([[wpfr>WebDAV|WebDAV]], etc.). **Apache** est probablement le serveur HTTP le plus populaire. C'est donc lui qui met à disposition la plupart des sites Web du [[wpfr>World_Wide_Web|WWW]].\\+Un [[wpfr>Serveur_HTTP|serveur HTTP]] permet à un site [[:web]] de communiquer avec un navigateur en utilisant le protocole [[wpfr>Hypertext_Transfer_Protocol|HTTP]]([[wpfr>Hypertext_Transfer_Protocol_Secure|S]]]]) et ses extensions ([[:WebDAV]], etc.). **Apache** est probablement le serveur HTTP le plus populaire. C'est donc lui qui met à disposition la plupart des sites [[:web]] du [[wpfr>World_Wide_Web|WWW]].\\
 Il est produit par la //Apache Software Foundation//. C'est un logiciel libre fourni sous la [[wpfr>Licence_Apache|licence spécifique Apache]]. Il est produit par la //Apache Software Foundation//. C'est un logiciel libre fourni sous la [[wpfr>Licence_Apache|licence spécifique Apache]].
  
-On utilise généralement Apache en conjonction avec d'autres logiciels, permettant d'interpréter du code et d'accéder à des bases de données. Le cas le plus courant est celui d'un serveur [[:LAMP]] (Linux Apache MySQL PHP).+On utilise généralement **Apache** en conjonction avec d'autres logiciels, permettant d'interpréter du code et d'accéder à des bases de données. Le cas le plus courant est celui d'un serveur [[:LAMP]] ([[:distributions|Linux]] Apache [[:MySQL]] [[:PHP]]).
  
 <note important>Avant de vous lancer dans l'utilisation d'Apache et si ce ne sont pas des choses claires pour vous, n'hésitez pas à consulter la documentation concernant [[:web|le Web et le protocole HTTP]]. <note important>Avant de vous lancer dans l'utilisation d'Apache et si ce ne sont pas des choses claires pour vous, n'hésitez pas à consulter la documentation concernant [[:web|le Web et le protocole HTTP]].
  
-Les références à prendre en compte pour comprendre la configuration d'Apache, sont [[https://httpd.apache.org/docs/current/fr/|la documentation officielle]], les ressources présentes sur votre système, notamment ''/usr/share/doc/apache2/README.Debian.gz'', ainsi que les pages de manuel.</note>+Les références à prendre en compte pour comprendre la configuration d'**Apache**, sont [[https://httpd.apache.org/docs/current/fr/|la documentation officielle]], les ressources présentes sur votre système, notamment ''/usr/share/doc/apache2/README.Debian.gz'', ainsi que les pages de manuel.</note>
  
 ===== Installation ===== ===== Installation =====
  
-Pour installer Apache seul, [[:tutoriel:comment_installer_un_paquet|installez simplement le paquet]] **[[apt>apache2]]**.+Pour installer **Apache** seul, [[:tutoriel:comment_installer_un_paquet|installez simplement le paquet]] ''[[apt>apache2]]''.
  
-Pour installer Apache avec PHP et MySQL ou MariaDB, reportez vous à l'[[:lamp#installation|installation de LAMP]].+Pour installer Apache avec [[:PHP]] et [[:MySQL]] ou [[:MariaDB]], reportez vous à l'[[:lamp#installation|installation de LAMP]].
  
 À la suite de cette installation votre serveur doit fonctionner et être accessible à l'adresse [[http://localhost]] (à partir de la même machine). À la suite de cette installation votre serveur doit fonctionner et être accessible à l'adresse [[http://localhost]] (à partir de la même machine).
Ligne 25: Ligne 25:
 ===== Lancement ===== ===== Lancement =====
  
-Apache2 se lance automatiquement dès son installation, et se relance automatiquement à chaque démarrage. C'est l'idéal pour un serveur qui doit continuellement fournir du contenu en ligne, mais pour un serveur de test (on dit de //développement//) on pourrait désirer un comportement différent.+**Apache** se lance automatiquement dès son installation, et se relance automatiquement à chaque démarrage. C'est l'idéal pour un serveur qui doit continuellement fournir du contenu en ligne, mais pour un serveur de test (on dit de //développement//) on pourrait désirer un comportement différent. 
 + 
 +<note> 
 +Le nom du processus est ''apache2'', c'est aussi le nom du service [[:systemd]] qui permet son lancement automatique. 
 +</note>
  
 ==== Empêcher Apache de démarrer automatiquement  ==== ==== Empêcher Apache de démarrer automatiquement  ====
Ligne 31: Ligne 35:
 Pour empêcher cela : Pour empêcher cela :
 <code>sudo systemctl disable apache2</code> <code>sudo systemctl disable apache2</code>
 +
 ==== Réactiver le démarrage automatique ==== ==== Réactiver le démarrage automatique ====
  
Ligne 38: Ligne 43:
 ==== Autres commandes utiles ==== ==== Autres commandes utiles ====
  
-  * Pour arrêter apache2 : ''sudo systemctl stop apache2'' +  * Pour arrêter Apache : ''sudo systemctl stop apache2'' 
-  * Pour lancer apache2 : ''sudo systemctl start apache2'' +  * Pour lancer Apache : ''sudo systemctl start apache2'' 
-  * Pour relancer apache2 : ''sudo systemctl restart apache2'' +  * Pour relancer Apache : ''sudo systemctl restart apache2'' 
-  * Pour recharger la configuration d'apache2 : ''sudo systemctl reload apache2''+  * Pour recharger la configuration d'Apache : ''sudo systemctl reload apache2''
   * Pour voir la version d'Apache utilisée : ''sudo apache2ctl -v'' ou ''a2query -v''   * Pour voir la version d'Apache utilisée : ''sudo apache2ctl -v'' ou ''a2query -v''
   * Pour tester l'ensemble de la configuration d'Apache : ''sudo apache2ctl -t''   * Pour tester l'ensemble de la configuration d'Apache : ''sudo apache2ctl -t''
Ligne 51: Ligne 56:
 ===== Mode de fonctionnement sommaire ===== ===== Mode de fonctionnement sommaire =====
  
-Lorsqu'il démarre, Apache charge les fichiers de configuration et se met en attente de requêtes sur les interfaces réseaux. On dit qu'il écoute (//listen// en anglais) certains ports.+Lorsqu'il démarre, **Apache** charge les fichiers de configuration et se met en attente de requêtes sur les interfaces réseaux. On dit qu'il écoute (//listen// en anglais) certains ports.
  
-Lorsqu'on utilise un navigateur web, que l'on clique sur un lien ou que l'on saisit directement une [[web#url|URL]] dans la barre d'adresse, on effectue une requête :+Lorsqu'on utilise un navigateur web, que l'on clique sur un lien ou que l'on saisit directement une [[:web#URL]] dans la barre d'adresse, on effectue une requête :
   * le navigateur demande au système de résoudre le nom de domaine (il obtient l'adresse IP du serveur)   * le navigateur demande au système de résoudre le nom de domaine (il obtient l'adresse IP du serveur)
-  * il envoie une requête à l'adresse IP du serveur sur le port 80 (HTTP) ou 443 (HTTPS) pour lui demander de retourner un contenu particulier+  * il envoie une requête à l'adresse IP du serveur sur le port ''80'' (HTTP) ou ''443'' (HTTPS) pour lui demander de retourner un contenu particulier
   * le serveur HTTP reçoit la requête, et en fonction de divers paramètres (URL appelée, configuration du serveur, etc.), va chercher un contenu dans un fichier ou lance un script qui va générer un contenu   * le serveur HTTP reçoit la requête, et en fonction de divers paramètres (URL appelée, configuration du serveur, etc.), va chercher un contenu dans un fichier ou lance un script qui va générer un contenu
   * le serveur renvoie ce contenu à l'adresse IP du navigateur   * le serveur renvoie ce contenu à l'adresse IP du navigateur
Ligne 64: Ligne 69:
 ===== Fichiers de configuration ===== ===== Fichiers de configuration =====
  
-Un seul serveur Apache permet de déployer simultanément plusieurs sites et services qu'il faut configurer individuellement.\\ +Un unique serveur Apache permet de déployer simultanément plusieurs sites et services qu'on doit pour cela configurer individuellement.\\ 
-Pour plus de clarté, la configuration d'Apache2 est morcelée. Toutefois, tous les fichiers de configuration se situent dans le répertoire ''/etc/apache2'' :+Pour plus de clarté, la configuration d'Apache est morcelée. Toutefois, tous les fichiers de configuration se situent dans le répertoire ''/etc/apache2'' :
  
   * ''sites-available'' contient les fichiers de configuration des **sites** disponibles   * ''sites-available'' contient les fichiers de configuration des **sites** disponibles
Ligne 76: Ligne 81:
   * ''mods-enabled'' contient des [[:lien_physique_et_symbolique|liens symboliques]] vers les configurations, dans ''mods-available'', des modules activés   * ''mods-enabled'' contient des [[:lien_physique_et_symbolique|liens symboliques]] vers les configurations, dans ''mods-available'', des modules activés
  
-<note important>Normalement les fichiers de configuration globale ''apache2.conf'' (NOTA dans la documentationles forums, ce fichier peut-être nommé ''httpd.conf'', nom utilisé dans d’autres distributions), ''envars'' et ''ports.conf'' n'ont pas à être modifiés.+<note important>Les fichiers de configuration globale ''apache2.conf''((Sur certaines autres [[:distributions]]le fichier de configuration principal d'Apache ne s'appelle pas ''apache2.conf'' mais ''httpd.conf''.)), ''envars'' et ''ports.conf'' n'ont en principe pas à être modifiés.
  
-Ces fichiers généraux sont susceptibles d'être écrasés lors d'une mise à jour majeure de son système, et on perd dans ce cas sa configuration personnalisée.+Ces fichiers généraux sont susceptibles d'être écrasés lors d'une mise à jour majeure de son système, et on peut dans ce cas perdre sa configuration personnalisée.
  
-Toute la configuration devrait se faire dans les sous dossiers ''xxx-available''.</note>+Toute la configuration devrait se faire dans les sous-répertoires ''xxx-available''.</note>
  
-Les diverses configurations sont activées (''a2en'' pour //Apache enable//) ou désactivées (''a2dis'' pour //Apache disable//) avec les commandes suivantes :+Les diverses configurations sont activées (''a2en'' pour //**A**pache **2** **en**able//) ou désactivées (''a2dis'' pour //**A**pache **2** **dis**able//) avec les commandes suivantes :
  
 <code>sudo a2ensite [configuration d'un site à activer] <code>sudo a2ensite [configuration d'un site à activer]
Ligne 102: Ligne 107:
  
 Un dernier fichier, ''/etc/apache2/ports.conf'', permet de spécifier les ports à écouter.\\ Un dernier fichier, ''/etc/apache2/ports.conf'', permet de spécifier les ports à écouter.\\
-Par défaut, il s'agit des ports 80 (port par défaut pour HTTP), et 443 (port par défaut pour HTTPS) si le [[#https|module SSL]] est activé.+Par défaut, il s'agit des ports ''80'' (port par défaut pour HTTP), et ''443'' (port par défaut pour HTTPS) si le [[#https|module SSL]] est activé.
  
 Sauf cas très particulier, il n'est pas nécessaire de toucher à cette configuration. Sauf cas très particulier, il n'est pas nécessaire de toucher à cette configuration.
Ligne 117: Ligne 122:
  
 <note important> <note important>
-Ce chapitre est ici à titre d'information.+Ce chapitre est ici à titre d'information.\\
 Il n'est a priori pas nécessaire de modifier les fichiers existants par défaut. Chaque site ou service devrait correspondre à un hôte virtuel unique, défini dans un fichier indépendant (voir [[#creation_d_hotes_virtuels|création d'hôtes virtuels]]). Il n'est a priori pas nécessaire de modifier les fichiers existants par défaut. Chaque site ou service devrait correspondre à un hôte virtuel unique, défini dans un fichier indépendant (voir [[#creation_d_hotes_virtuels|création d'hôtes virtuels]]).
 De plus ces fichiers existants par défaut peuvent éventuellement être écrasés lors de mises à jour majeures du système. De plus ces fichiers existants par défaut peuvent éventuellement être écrasés lors de mises à jour majeures du système.
Ligne 132: Ligne 137:
  
 ^ directive ^ description ^ ^ directive ^ description ^
-| <file><VirtualHost *:80></file> | On déclare l'hôte virtuel. Il doit répondre aux requêtes qui s'adressent à toutes les adresses IP (''*'') du serveur sur le port 80. On peut ici éventuellement spécifier une adresse IP unique à laquelle répondra Apache pour un hôte virtuel donné (dans le cas ou le serveur possède plusieurs adresses IP), ou choisir de répondre au port 443 (pour [[#HTTPS]]) ou à un port exotique (à condition de [[#configuration_des_ports_d_ecoute|l'écouter]]). |+| <file><VirtualHost *:80></file> | On déclare l'hôte virtuel. Il doit répondre aux requêtes qui s'adressent à toutes les adresses IP (''*'') du serveur sur le port ''80''. On peut ici éventuellement spécifier une adresse IP unique à laquelle répondra Apache pour un hôte virtuel donné (dans le cas ou le serveur possède plusieurs adresses IP), ou choisir de répondre au port ''443'' (pour [[#HTTPS]]) ou à un port exotique (à condition de [[#configuration_des_ports_d_ecoute|l'écouter]]). |
 | <file>ServerAdmin webmaster@localhost</file> | C'est le courriel de l'administrateur système. Cette directive n'est ni très utile, ni indispensable. | | <file>ServerAdmin webmaster@localhost</file> | C'est le courriel de l'administrateur système. Cette directive n'est ni très utile, ni indispensable. |
 | <file>DocumentRoot /var/www/html</file> | C'est le chemin absolu vers l'emplacement local (sur l'espace disque du serveur) qui sera la racine de l'hôte. Apache recherche en premier un fichier ''index.html'' ou ''index.php'' à afficher par défaut à l'emplacement spécifié. On constate que c'est donc bien cet hôte virtuel qui affiche le message //It Works!// contenu dans le fichier ''/var/www/html/index.html''. | | <file>DocumentRoot /var/www/html</file> | C'est le chemin absolu vers l'emplacement local (sur l'espace disque du serveur) qui sera la racine de l'hôte. Apache recherche en premier un fichier ''index.html'' ou ''index.php'' à afficher par défaut à l'emplacement spécifié. On constate que c'est donc bien cet hôte virtuel qui affiche le message //It Works!// contenu dans le fichier ''/var/www/html/index.html''. |
Ligne 172: Ligne 177:
  
 ^ directive ^ description ^ ^ directive ^ description ^
-| <file><VirtualHost *:80></file> | On accepte les connexions sur n'importe quelle IP du serveur (''*'') sur le port 80. |+| <file><VirtualHost *:80></file> | On accepte les connexions sur n'importe quelle IP du serveur (''*'') sur le port ''80''. |
 | <file>ServerName example.com</file> | Cet hôte virtuel sera seulement appelé pour le nom de domaine //example.com//... | | <file>ServerName example.com</file> | Cet hôte virtuel sera seulement appelé pour le nom de domaine //example.com//... |
 | <file>ServerAlias www.example.com</file> | ...ainsi que pour le sous-domaine //<nowiki>www.example.com</nowiki>//. On peut spécifier ici d'autres noms de domaine en les séparant par un espace. On peut aussi utiliser //*.example.com// pour inclure tous les sous-domaines. | | <file>ServerAlias www.example.com</file> | ...ainsi que pour le sous-domaine //<nowiki>www.example.com</nowiki>//. On peut spécifier ici d'autres noms de domaine en les séparant par un espace. On peut aussi utiliser //*.example.com// pour inclure tous les sous-domaines. |
Ligne 189: Ligne 194:
  
 <note tip> <note tip>
-On peut définir un hôte virtuel sans avoir de nom de domaine réservé auprès d'un bureau d'enregistrement (registrar). +On peut définir un hôte virtuel sans avoir de nom de domaine réservé auprès d'un bureau d'enregistrement (//registrar//). 
-Cela peut être très pratique en phase de développement sur une machine ou un réseau local, par exemple.+Ceci peut être très pratique en phase de développement sur une machine ou un réseau local, par exemple.
  
-Il existe plusieurs méthodes :\\  +Il existe plusieurs méthodes :
-\\ +
  
-  * on peut utiliser un sous-domaine de ''localhost'', comme ''example.localhost'', qui pointera directement sur la machine locale (et qui ne sera donc valable que sur la machine qui fait tourner Apache)\\  +  * on peut utiliser un sous-domaine de ''localhost'', comme ''example.localhost'', qui pointera directement sur la machine locale (et qui ne sera donc valable que sur la machine qui fait tourner Apache).
-\\ +
  
-  * on peut profiter des services [[:zeroconf#mDNS]] qui sont aujourd'hui fonctionnels sur la plupart des réseaux domestiques, sans qu'on ne touche à rien : on peut tester la connexion depuis le client en tapant la commande ''ping'' suivi par le nom de la machine (sans accent et en remplaçant les espaces par des ''-'') ''.local'' (tout attaché) : +  * on peut profiter des services [[:zeroconf#mDNS]] qui sont aujourd'hui fonctionnels sur la plupart des réseaux domestiques, sans qu'on ne touche à rien : on peut tester la connexion depuis le client en tapant la commande ''ping'' suivi par le nom de la machine (sans accent et en remplaçant les espaces par des ''-'') ''.local'' (tout attaché) :<code>ping mon-ordi.local</code>Si on a une réponse c'est que ça fonctionne, on peut utiliser ce nom de domaine sur le réseau local.
-<code>ping mon-ordi.local</code> +
-Si on a une réponse c'est que ça fonctionne, on peut utiliser ce nom de domaine sur le réseau local.\\  +
-\\ +
  
-  * ou on peut créer un nouveau nom de domaine "fictif". +  * ou on peut créer un nouveau nom de domaine "fictif".\\ Il faut dans ce cas résoudre l'IP du serveur pour un domaine fictif côté client. Cela se fait soit en utilisant un résolveur de DNS local "menteur" (voir le projet [[wpfr>Pi-hole]] par ex.), soit en [[:tutoriel:comment_modifier_un_fichier|éditant le fichier]] ''/etc/hosts'' de chaque client avec les [[:sudo|droits d'administration]] pour y ajouter la ligne :<file - hosts>127.0.0.1 example.lan</file>où ''127.0.0.1'' est l'adresse IP du serveur (locale dans ce cas) et ''example.lan'' est le nom de domaine choisi.\\ (Voir la [[:hosts|documentation concernant le fichier hosts]]).\\ Avec la directive ''ServerName example.lan'' dans le //VirtualHost//, l'hôte virtuel sera accessible depuis ce client à l'adresse [[http://example.lan/]].\\ Les TLD recommandés dans ce contexte sont ''.intranet'', ''.internal'', ''.private'', ''.corp'', ''.home'', et ''.lan''.(([[https://datatracker.ietf.org/doc/html/rfc6762#appendix-G|RFC6732 - Private DNS Namespaces]]))
-Il faut dans ce cas résoudre l'IP du serveur pour un domaine fictif côté client. Cela se fait soit en utilisant un résolveur de DNS local "menteur" (voir le projet [[wpfr>Pi-hole]] par ex.), soit en [[:tutoriel:comment_modifier_un_fichier|éditant le fichier]] ''/etc/hosts'' de chaque client avec les [[:sudo|droits d'administration]] pour y ajouter la ligne : +
-<file - hosts>127.0.0.1 example.lan</file> +
-où ''127.0.0.1'' est l'adresse IP du serveur (locale dans ce cas) et ''example.lan'' est le nom de domaine choisi.\\ +
-(Voir la [[:hosts|documentation concernant le fichier hosts]]) +
- +
-Avec la directive ''ServerName example.lan'' dans le //VirtualHost//, l'hôte virtuel sera accessible depuis ce client à l'adresse [[http://example.lan/]]. +
- +
-Les TLD recommandés dans ce contexte sont ''.intranet'', ''.internal'', ''.private'', ''.corp'', ''.home'', et ''.lan''.(([[https://datatracker.ietf.org/doc/html/rfc6762#appendix-G|RFC6732 - Private DNS Namespaces]]))+
 </note> </note>
  
Ligne 294: Ligne 286:
 Il est très couramment utilisé en conjonction d'Apache. Voir [[:LAMP]]. Il est très couramment utilisé en conjonction d'Apache. Voir [[:LAMP]].
  
-Le module //mod_php// fournit un intérpréteur (ou plus exactement une [[https://fr.wikipedia.org/wiki/Server_Application_Programming_Interface|SAPI]]) PHP intégré à Apache. C'est la méthode la plus simple, mais aussi la moins perfomante, pour utiliser PHP avec Apache.+Le module **mod_php** fournit un intérpréteur (ou plus exactement une [[https://fr.wikipedia.org/wiki/Server_Application_Programming_Interface|SAPI]]) PHP intégré à Apache. C'est la méthode la plus simple, mais aussi la moins perfomante, pour utiliser PHP avec Apache.
  
 Une autre méthode consiste à utiliser [[http://php.net/manual/fr/install.fpm.php|PHP-FPM]]. C'est une solution plus performante, plus souple et plus sécurisée, mais plus complexe à mettre en œuvre. Nous ne traiterons pas de ce cas ici. Une autre méthode consiste à utiliser [[http://php.net/manual/fr/install.fpm.php|PHP-FPM]]. C'est une solution plus performante, plus souple et plus sécurisée, mais plus complexe à mettre en œuvre. Nous ne traiterons pas de ce cas ici.
  
-Pour installer et activer //mod_php// sous ubuntu, on utilise cette commande :+Pour installer et activer **mod_php** sous ubuntu, on utilise cette commande :
 <code>sudo apt install libapache2-mod-php</code> <code>sudo apt install libapache2-mod-php</code>
  
Ligne 305: Ligne 297:
 ==== mod_rewrite ==== ==== mod_rewrite ====
  
-**//[[https://httpd.apache.org/docs/current/fr/mod/mod_rewrite.html|mod_rewrite]]//** permet de réécrire des [[wpfr>Uniform_Resource_Locator|URL]].+**[[https://httpd.apache.org/docs/current/fr/mod/mod_rewrite.html|mod_rewrite]]** permet de réécrire des [[:web#URL]].
  
-Il s'agit généralement de remplacer le chemin, le nom de la page, et la chaîne de requête de l'[[:web#url|URL]] par une chaîne de caractère en concordance avec la structure et le contenu du site.+Il s'agit généralement de remplacer le chemin, le nom de la page, et la chaîne de requête de l'[[:web#URL]] par une chaîne de caractère en concordance avec la structure et le contenu du site.
  
 De nombreux services ont recours à cette pratique afin d'augmenter leur référencement et de clarifier leur contenu.\\ De nombreux services ont recours à cette pratique afin d'augmenter leur référencement et de clarifier leur contenu.\\
Ligne 317: Ligne 309:
 <code>sudo a2enmod rewrite</code> <code>sudo a2enmod rewrite</code>
  
-<note>L'utilisation de //mod_rewrite// est relativement complexe et fait appel à des [[wpfr>Expression_régulière|expressions régulières]]. N'hésitez pas à consulter [[https://httpd.apache.org/docs/current/fr/rewrite/intro.html|la documentation officielle]] à ce sujet.\\+<note>L'utilisation de **mod_rewrite** est relativement complexe et fait appel à des [[wpfr>Expression_régulière|expressions régulières]]. N'hésitez pas à consulter [[https://httpd.apache.org/docs/current/fr/rewrite/intro.html|la documentation officielle]] à ce sujet.\\
 Pour la rédaction des expressions régulières, vous pouvez vous aider de services en ligne tels que [[https://regex101.com/|regex101.com]] ou [[https://regexr.com/|regexr.com]]</note> Pour la rédaction des expressions régulières, vous pouvez vous aider de services en ligne tels que [[https://regex101.com/|regex101.com]] ou [[https://regexr.com/|regexr.com]]</note>
  
Ligne 333: Ligne 325:
 <note>On peut écrire ces règles de réécriture dans une section ''[[#hotes_virtuels|<VirtualHost>]]'' ou  ''[[#hotes_virtuels|<Directory>]]'' (le comportement n'est pas le même), ou dans un fichier //[[#.htaccess]]//.</note> <note>On peut écrire ces règles de réécriture dans une section ''[[#hotes_virtuels|<VirtualHost>]]'' ou  ''[[#hotes_virtuels|<Directory>]]'' (le comportement n'est pas le même), ou dans un fichier //[[#.htaccess]]//.</note>
  
-<note important>N'oubliez pas de modifier le //virtualhost// en conséquence sinon les règles de réécriture ''.htaccess'' ne fonctionneront pas correctement. Voici un exemple de configuration qui marche +<note tip> 
-<code> +Si vous utilisez un fichier ''[[#.htaccess]]'', n'oubliez pas de renseigner la directive ''[[https://httpd.apache.org/docs/current/fr/mod/core.html#allowoverride|AllowOverride]]'' dans la configuration du //[[#Création d'hôtes virtuels|VirtualHost]]//, sans quoi aucun fichier ''.htaccess'' ne sera considéré 
-    <Directory /var/www/html> +<code>AllowOverride All</code>
-            AllowOverride All +
-    </Directory> +
-</code>+
 </note> </note>
 +
 ==== mod_proxy==== ==== mod_proxy====
  
-Comme [[:proxy|son nom l'indique]], **//[[https://httpd.apache.org/docs/current/fr/mod/mod_proxy.html|mod_proxy]]//** permet à apache de relayer des requêtes depuis ou vers un service tiers.+Comme [[:proxy|son nom l'indique]], **[[https://httpd.apache.org/docs/current/fr/mod/mod_proxy.html|mod_proxy]]** permet à Apache de relayer des requêtes depuis ou vers un service tiers.
  
-Ce module peut par exemple être utile lorsqu'on utilise d'autres serveurs HTTP en plus d'Apache sur un même serveur web, afin d'éviter d'avoir à accéder au contenu web sur d'autres ports que le port 80 ou 443.+Ce module peut par exemple être utile lorsqu'on utilise d'autres serveurs HTTP en plus d'Apache sur un même serveur web, afin d'éviter d'avoir à accéder au contenu web sur d'autres ports que le port ''80'' ou ''443''.
  
-<note warning>L'activation de ce module sur un serveur ouvert sur le web est dangereuse. Une mauvaise configuration permet par exemple à un intrus d'accéder aux services disponibles sur le réseau local, ou d'usurper votre adresse IP.\\+<note warning>L'activation de ce module sur un serveur ouvert sur Internet est dangereuse. Une mauvaise configuration permet par exemple à un intrus d'accéder aux services disponibles sur le réseau local, ou d'usurper votre adresse IP.\\
 N'activez ce module que si vous êtes certain de ce que vous faites. N'activez ce module que si vous êtes certain de ce que vous faites.
  
Ligne 366: Ligne 356:
 ==== mod_userdir ==== ==== mod_userdir ====
  
-Il peut être utile, et c'est prévu par Apache, que chaque utilisateur puisse mettre un contenu web à disposition depuis son espace personnel (dans le répertoire ''home'').\\ +Il peut être utile, et c'est prévu par Apache, que chaque utilisateur puisse mettre un contenu [[:web]] à disposition depuis son espace personnel (dans le répertoire ''home'').\\ 
-Ce contenu sera accessible à l'adresse //<nowiki>http://example.com/~nom_de_lutilisateur</nowiki>//, ou dans la plupart des cas : //<nowiki>http://localhost/~nom_de_lutilisateur</nowiki>//.+Ce contenu sera accessible à l'adresse ''http://example.com/~nom_de_lutilisateur'', ou dans la plupart des cas : ''http://localhost/~nom_de_lutilisateur''.
  
 Pour mettre cette configuration en place, on crée un répertoire ''public_html'' dans son espace personnel et on lui donne les droits de lecture et d'exécution : Pour mettre cette configuration en place, on crée un répertoire ''public_html'' dans son espace personnel et on lui donne les droits de lecture et d'exécution :
Ligne 374: Ligne 364:
 chmod -R 755 ~/public_html</code> chmod -R 755 ~/public_html</code>
  
-On active ensuite le module //mod_userdir// :+On active ensuite le module **mod_userdir** :
 <code>sudo a2enmod userdir <code>sudo a2enmod userdir
 sudo systemctl reload apache2</code> sudo systemctl reload apache2</code>
  
-Le message //Mon site personnel// devrait alors être lisible à l'adresse http://localhost/~nom_de_lutilisateur+Le message //Mon site personnel// devrait alors être lisible à l'adresse ''http://localhost/~nom_de_lutilisateur''.
  
 <note tip>L'interprétation des fichiers PHP est désactivée par défaut dans les dossiers personnels.\\ <note tip>L'interprétation des fichiers PHP est désactivée par défaut dans les dossiers personnels.\\
-Pour l'activer il faut modifier le fichier /etc/apache2/mods-available/php7.x.conf en commentant les lignes concernées.</note>+Pour l'activer il faut modifier le fichier ''/etc/apache2/mods-available/phpX.X.conf'' (''X'' à adapter) en commentant les lignes concernées.</note>
  
 ==== mod_headers ==== ==== mod_headers ====
  
-Le module [[https://httpd.apache.org/docs/current/fr/mod/mod_headers.html|headers]] permet de personnaliser les en-têtes HTTP. C'est à dire les informations envoyées par le serveur avant le document lui-même.+Le module **[[https://httpd.apache.org/docs/current/fr/mod/mod_headers.html|headers]]** permet de personnaliser les en-têtes HTTP. C'est à dire les informations envoyées par le serveur avant le document lui-même.
  
 C'est utile notamment pour améliorer la sécurité des sites web. Voici quelques en-têtes qui peuvent être ajoutées à cette fin. C'est utile notamment pour améliorer la sécurité des sites web. Voici quelques en-têtes qui peuvent être ajoutées à cette fin.
Ligne 439: Ligne 429:
 ===== Sécurité  ===== ===== Sécurité  =====
  
-<note important>Sans chiffrer les communications avec le module //SSL//, toutes les informations échangées entre le navigateur et le serveur, contenu web et variables d'authentification, transitent en clair sur Internet. Une des premières règles de sécurité pour Apache est donc de forcer l'utilisation de [[#HTTPS]].</note>+<note important>Sans chiffrer les communications avec le module **SSL**, toutes les informations échangées entre le navigateur et le serveur, contenu web et variables d'authentification, transitent en clair sur Internet. Une des premières règles de sécurité pour Apache est donc de forcer l'utilisation de [[#HTTPS]].</note>
  
 ==== Permissions ==== ==== Permissions ====
  
-Par défaut sur Ubuntu, Apache est exécuté par l'utilisateur //www-data//, qui appartient au groupe //www-data//.\\ +Par défaut sur Ubuntu, Apache est exécuté par l'utilisateur ''www-data'', qui appartient au groupe ''www-data''.\\ 
-Quand Apache créé un fichier sur l'espace disque (via par exemple un [[#mod_php|script PHP]]), celui-ci appartient donc par défaut à l'utilisateur //www-data// et au groupe //www-data//. De la même manière, le serveur ne peut accéder qu'au contenu accessible par //www-data//.+Quand Apache créé un fichier sur l'espace disque (via par exemple un [[#mod_php|script PHP]]), celui-ci appartient donc par défaut à l'utilisateur ''www-data'' et au groupe ''www-data''. De la même manière, le serveur ne peut accéder qu'au contenu accessible par ''www-data''.
  
 Pour pouvoir facilement éditer les fichiers tout en conservant un bon niveau de sécurité il est recommandé de modifier le propriétaire des fichiers auxquels peut accéder Apache.\\ Pour pouvoir facilement éditer les fichiers tout en conservant un bon niveau de sécurité il est recommandé de modifier le propriétaire des fichiers auxquels peut accéder Apache.\\
-Le propriétaire devrait être l'utilisateur qui va maintenir le contenu localement, mais le groupe propriétaire devrait être //www-data// :((cette méthode se base sur [[https://serverfault.com/a/357109|cette réponse]], qui a reçu le plus d'avis positifs sur [[wpfr>Stack_Exchange_Network|Server Fault]].))+Le propriétaire devrait être l'utilisateur qui va maintenir le contenu localement, mais le groupe propriétaire devrait être ''www-data'' :((cette méthode se base sur [[https://serverfault.com/a/357109|cette réponse]], qui a reçu le plus d'avis positifs sur [[wpfr>Stack_Exchange_Network|Server Fault]].))
 <code>sudo chown -R $USER:www-data /var/www/example</code> <code>sudo chown -R $USER:www-data /var/www/example</code>
  
-On change ensuite les [[:permissions]] du contenu de manière à ce que l'utilisateur puisse le lire et le modifier, mais qu'Apache (dans le groupe //www-data//) ne puisse que le lire.+On change ensuite les [[:permissions]] du contenu de manière à ce que l'utilisateur puisse le lire et le modifier, mais qu'Apache (dans le groupe ''www-data'') ne puisse que le lire.
  
-On attribue donc les [[:droits]] ''%%rwx r-x ---%%'' (750) pour les répertoires, et ''%%rw- r-- ---%%'' (640) pour les fichiers :+On attribue donc les [[:droits]] ''%%rwx r-x ---%%'' (''750'') pour les répertoires, et ''%%rw- r-- ---%%'' (''640'') pour les fichiers :
 <code>chmod -R a-rwx,u+rwX,g+rX /var/www/example</code> <code>chmod -R a-rwx,u+rwX,g+rX /var/www/example</code>
 (pour rappel ''x'' concerne les répertoires et les fichiers tandis que ''X'' ne concerne que les répertoires - et autorise à les ouvrir) (pour rappel ''x'' concerne les répertoires et les fichiers tandis que ''X'' ne concerne que les répertoires - et autorise à les ouvrir)
  
-Si Apache doit pouvoir modifier du contenu (pour un répertoire d'upload par exemple), on ne modifie que la permission concernant le groupe (le second numéro), donc ''%%rwx rwx ---%%'' (770) pour les répertoires et ''%%rw- rw- ---%%'' (660) pour les fichiers :+Si Apache doit pouvoir modifier du contenu (pour un répertoire d'//upload// par exemple), on ne modifie que la permission concernant le groupe (le second numéro), donc ''%%rwx rwx ---%%'' (''770'') pour les répertoires et ''%%rw- rw- ---%%'' (''660'') pour les fichiers :
 <code>chmod -R g+w /var/www/example/upload</code> <code>chmod -R g+w /var/www/example/upload</code>
  
Ligne 476: Ligne 466:
 Si vous utilisez PHP, une page blanche indique très probablement que l'affichage des retours d'erreur sur la page n'est pas activé. Si vous utilisez PHP, une page blanche indique très probablement que l'affichage des retours d'erreur sur la page n'est pas activé.
  
-Vous pouvez l'activer en suivant [[php#activer_le_rapport_d_erreur|cette documentation]]. +Vous pouvez l'activer en suivant [[:php#activer_le_rapport_d_erreur|cette documentation]].
  
 ==== Erreur 403 ==== ==== Erreur 403 ====
Ligne 502: Ligne 491:
 ==== Attente puis erreur 503 "service indisponible" ==== ==== Attente puis erreur 503 "service indisponible" ====
  
-Cette erreur indique que le serveur HTTP est dans les choux. Le service existe mais prend  apparemment un temps interminable à répondre.\\+Cette erreur indique que le serveur HTTP est dans les choux. Le service existe mais prend  apparemment un temps interminable à répondre.
   * En premier lieu [[#autres_commandes_utiles|redémarrez Apache]].   * En premier lieu [[#autres_commandes_utiles|redémarrez Apache]].
   * Si le problème se pose toujours, cela peut par exemple être dû au fait qu'un script (par ex. [[:PHP]]) entre dans une boucle infinie. En plus de surcharger le processeur, ce problème ne générera pas de message d'erreur ce qui en fait malheureusement un problème particulièrement compliqué à débugger. Si votre [[:CMS]] ou application web utilise un système de cache, vous pouvez essayez de le vider et de le désactiver. Puis essayez de désinstaller les plugins installés récemment, défaire les modifications récentes ou restaurer une sauvegarde de votre application.   * Si le problème se pose toujours, cela peut par exemple être dû au fait qu'un script (par ex. [[:PHP]]) entre dans une boucle infinie. En plus de surcharger le processeur, ce problème ne générera pas de message d'erreur ce qui en fait malheureusement un problème particulièrement compliqué à débugger. Si votre [[:CMS]] ou application web utilise un système de cache, vous pouvez essayez de le vider et de le désactiver. Puis essayez de désinstaller les plugins installés récemment, défaire les modifications récentes ou restaurer une sauvegarde de votre application.
- 
-==== Localhost inaccessible ==== 
-**Juillet 2024** (sous Ubuntu 24.04) : une erreur de configuration du fichier etc/apache2/mods-enabled/php8.2.load empêche le démarrage d'apache2 et donc l'accès à localhost. Ouvrez ce fichier et lisez la 3e ligne qui renvoie sur le fichier /usr/lib/apache2/modules/libphp8.2.so En fait (chez moi), ce fichier s'appelle désormais libphp8.3.so. Il faut donc corriger la ligne de ce premier fichier avec les [[sudo|Droits de super utilisateur]] avec le nom correct. L'accès est rétabli.  
  
 ==== Fichiers introuvables dans /javascript ==== ==== Fichiers introuvables dans /javascript ====
  
-Cela peut venir du fait que le paquet **//javascript-common//** créé un alias global de ''/javascript'' vers ''/usr/share/javascript'' :+Cela peut venir du fait que le paquet ''[[apt>javascript-common]]'' créé un alias global de ''/javascript'' vers ''/usr/share/javascript'' :
 <file - /etc/apache2/conf-available/javascript-common.conf>Alias /javascript /usr/share/javascript/ <file - /etc/apache2/conf-available/javascript-common.conf>Alias /javascript /usr/share/javascript/
  
Ligne 518: Ligne 504:
 </Directory></file> </Directory></file>
 La solution est soit de supprimer ce paquet, soit de renommer le répertoire ''javascript'' à la racine de l'hôte virtuel, par exemple en ''js''. La solution est soit de supprimer ce paquet, soit de renommer le répertoire ''javascript'' à la racine de l'hôte virtuel, par exemple en ''js''.
 +
 +==== Conflit de version ====
 +
 +Si lors de l'installation de modules on a spécifié des numéros de versions (ou lorsqu'on utilise le PPA d'//Ondřej Surý// :-/ ), ce qui est une mauvaise idée, on peut après une mise à jour subir des conflits entre différentes versions d'un même module.
 +
 +Ceci peut entre autre rendre le démarrage d'Apache impossible. Le symptôme peut alors par exemple être une ligne du fichier ''/etc/apache2/mods-enabled/php8.2.load'' renvoyant vers ''/usr/lib/apache2/modules/libphp8.2.so'' alors que ce fichier s'appelle ''libphp8.3.so'' pour [[:PHP|PHP 8.3]].
 +
 +La solution est dans ce cas de supprimer les paquets d'Apache et de ses modules et de [[#installation|réinstaller proprement]] en suivant la documentation ici présente.
 +
 +<note>
 +Voir aussi la [[:php#conflits_potentiels_entre_plusieurs_versions_de_php|documentation PHP]] similaire à ce sujet.
 +</note>
  
 ===== Liens utiles ===== ===== Liens utiles =====
Ligne 529: Ligne 527:
    * [[https://www.it-connect.fr/cours-tutoriels/administration-systemes/serveur-web/apache/|Plusieurs tutoriels sur la configuration d'Apache sur IT-Connect]]    * [[https://www.it-connect.fr/cours-tutoriels/administration-systemes/serveur-web/apache/|Plusieurs tutoriels sur la configuration d'Apache sur IT-Connect]]
    * discussion au sujet de cette documentation sur le forum : https://forum.ubuntu-fr.org/viewtopic.php?pid=21886288    * discussion au sujet de cette documentation sur le forum : https://forum.ubuntu-fr.org/viewtopic.php?pid=21886288
-    
  
 ---- ----
-// Contributeurs : --- //[[:utilisateurs:bruno|bruno]], [[:utilisateurs:krodelabestiole]], [[:utilisateurs:benje]], [[:utilisateurs:Pepou06]], [[:utilisateurs:Oxossi]], [[:utilisateurs:Karting06]], [[:utilisateurs:albanmartel]]. //+// Contributeurs : [[:utilisateurs:krodelabestiole]], [[:utilisateurs:bruno]], [[:utilisateurs:benje]], [[:utilisateurs:Pepou06]], [[:utilisateurs:Oxossi]], [[:utilisateurs:Karting06]], [[:utilisateurs:albanmartel]].//