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édentes Révision précédente
Prochaine révision
Révision précédente
apache2 [Le 15/02/2022, 18:00]
bruno [mod_headers] correction de sécurité
apache2 [Le 20/05/2025, 11:28] (Version actuelle)
krodelabestiole [Attente puis erreur 503 "service indisponible"] lien restart
Ligne 1: Ligne 1:
-{{tag>​réseau serveur internet ​Xenial Bionic ​Focal}}+{{tag>​réseau serveur internet Focal}}
 {{ :​logo:​apache-logo.png?​80nolink| Logo du logiciel Apache 2}} {{ :​logo:​apache-logo.png?​80nolink| Logo du logiciel Apache 2}}
  
 ====== Serveur HTTP Apache 2 ====== ====== Serveur HTTP Apache 2 ======
  
-Un [[https://​fr.wikipedia.org/​wiki/​Serveur_HTTP|serveur HTTP]] permet à un site web de communiquer avec un navigateur en utilisant le protocole [[https://​fr.wikipedia.org/​wiki/​Hypertext_Transfer_Protocol|HTTP(S)]] et ses extensions ([[https://​fr.wikipedia.org/​wiki/​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 [[https://​fr.wikipedia.org/​wiki/​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(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]].\\
 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]].
  
Ligne 25: Ligne 25:
 ===== Lancement ===== ===== Lancement =====
  
-Apache 2 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 peut éventuellement ​désirer un comportement différent.+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.
  
 ==== Empêcher Apache de démarrer automatiquement ​ ==== ==== Empêcher Apache de démarrer automatiquement ​ ====
Ligne 38: Ligne 38:
 ==== Autres commandes utiles ==== ==== Autres commandes utiles ====
  
-Pour arrêter apache2 : +  * Pour arrêter apache2 : ''​sudo systemctl stop apache2''​ 
-<​code>​sudo systemctl stop apache2</​code>​ +  ​* ​Pour lancer apache2 : ''​sudo systemctl start apache2''​ 
- +  ​* ​Pour relancer apache2 : ''​sudo systemctl restart apache2''​ 
-Pour lancer apache2 : +  ​* ​Pour recharger la configuration d'​apache2 : ''​sudo systemctl reload apache2''​ 
-<​code>​sudo systemctl start apache2</​code>​ +  ​* ​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 relancer apache2 :  +  * Pour lister les hôtes virtuels chargés : ''​a2query -s''​ 
-<​code>​sudo systemctl restart apache2</​code>​ +  * Pour lister les hôtes virtuels chargés et leurs configurations : ''​sudo apache2ctl -S''​ 
- +  ​* ​Pour tester la configuration des hôtes virtuels : ''​sudo apache2ctl -t -D DUMP_VHOSTS''​ 
-Pour recharger la configuration d'​apache2 : +  ​* ​Pour voir les modules d'​Apache chargés : ''​sudo apache2ctl -M''​ ou ''​a2query -m''​
-<​code>​sudo systemctl reload apache2</​code>​ +
-  +
-Pour voir la version d'​Apache utilisée : +
-<​code>​sudo apache2ctl -v</​code>​ +
- +
-Pour tester l'​ensemble de la configuration d'​Apache : +
-<​code>​sudo apache2ctl -t</​code>​ +
- +
-Pour tester la configuration des hôtes virtuels : +
-<​code>​sudo apache2ctl -t -D DUMP_VHOSTS</​code>​ +
- +
-Pour voir les modules d'​Apache chargés : +
-<​code>​sudo apache2ctl -M</​code>​+
  
 ===== Mode de fonctionnement sommaire ===== ===== Mode de fonctionnement sommaire =====
Ligne 66: Ligne 53:
 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 qu'​on ​rentre ​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|URL]] dans la barre d'​adresse,​ on effectue une requête : 
-  * Le navigateur résout ​le nom de domaine ​(il obtient l'adresse IP du serveur). +  * le nom de domaine ​est résolu en adresse IP  
-  * Il envoie une requête ​HTTP avec la méthode GET à l'IP du serveur sur le port 80 (ou HTTPS sur le port 443) 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'IP du navigateur. +  * le serveur renvoie ce contenu à l'adresse ​IP du navigateur 
-  * Le navigateur traite le contenu et le rend accessible à l'​internaute (en l'​affichant à l'​écran par ex.).+  * le navigateur traite le contenu et le rend accessible à l'​internaute (en l'​affichant à l'​écran par ex.).
  
 Voilà comment fonctionne (grossièrement ;-) ) un serveur web. Voilà comment fonctionne (grossièrement ;-) ) un serveur web.
Ligne 89: Ligne 76:
   * ''​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'',​ ''​envars''​ et ''​ports.conf''​ n'ont pas à être modifiés. Toute la configuration devrait se faire dans les sous dossiers ''​xxx-available''​.</​note>​+<note important>​Normalement les fichiers de configuration globale ''​apache2.conf'' ​(NOTA : dans la documentation,​ les forums, ce fichier peut-être nommé ''​httpd.conf'',​ nom utilisé dans d’autres distributions), ''​envars''​ et ''​ports.conf''​ n'ont 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. 
 + 
 +Toute la configuration devrait se faire dans les sous dossiers ''​xxx-available''​.</​note>​
  
 Les diverses configurations sont activées (''​a2en''​ pour //Apache 2 enable//) ou désactivées (''​a2dis''​ pour //Apache 2 disable//) avec les commandes suivantes : Les diverses configurations sont activées (''​a2en''​ pour //Apache 2 enable//) ou désactivées (''​a2dis''​ pour //Apache 2 disable//) avec les commandes suivantes :
Ligne 126: Ligne 117:
  
 <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 ​existant ​par défaut. Chaque site ou service devrait correspondre à un hôte virtuel unique, ​définit ​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 ​existant ​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.
 </​note>​ </​note>​
  
Ligne 155: Ligne 146:
 ==== Création d'​hôtes virtuels ==== ==== Création d'​hôtes virtuels ====
  
-<​note>​Pour en savoir plus sur les hôtes virtuels d'​Apache,​ référez-vous à la [[http://​httpd.apache.org/​docs/​current/​mod/​core.html#​virtualhost|documentation officielle]] et à ses [[https://​httpd.apache.org/​docs/​current/​fr/​vhosts/​examples.html|exemples]].+<​note>​Pour en savoir plus sur les hôtes virtuels d'​Apache,​ référez-vous à la [[http://​httpd.apache.org/​docs/​current/fr/​mod/​core.html#​virtualhost|documentation officielle]] et à ses [[https://​httpd.apache.org/​docs/​current/​fr/​vhosts/​examples.html|exemples]].
  
 Vous trouverez également des exemples de création d'​hôtes virtuels sous forme de tutoriels sur [[:​tutoriel:​lamp_repertoires_de_travail|cette page de la documentation.]]</​note>​ Vous trouverez également des exemples de création d'​hôtes virtuels sous forme de tutoriels sur [[:​tutoriel:​lamp_repertoires_de_travail|cette page de la documentation.]]</​note>​
Ligne 192: Ligne 183:
 CustomLog /​var/​log/​apache2/​access.example.com.log combined</​file>​ | Il est pratique d'​avoir des logs séparés pour chaque hôte virtuel, afin de ne pas mélanger toutes les informations. | CustomLog /​var/​log/​apache2/​access.example.com.log combined</​file>​ | Il est pratique d'​avoir des logs séparés pour chaque hôte virtuel, afin de ne pas mélanger toutes les informations. |
  
-Après ​avoir l'​avoir créée, il faut activer cette configuration avec la commande ''​sudo a2ensite [nom du fichier sans son extension]''​. Par exemple :+Après l'​avoir créée, il faut activer cette configuration avec la commande ''​sudo a2ensite [nom du fichier sans son extension]''​. Par exemple :
 <​code>​sudo a2ensite example.com</​code>​ <​code>​sudo a2ensite example.com</​code>​
 On recharge ensuite la configuration d'​Apache : On recharge ensuite la configuration d'​Apache :
Ligne 198: Ligne 189:
  
 <note tip> <note tip>
-On peut définir un hôte virtuel sans avoir de nom de domaine ​enregistré chez un 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.
  
-On peut soit 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), soit créer un nouveau nom de domaine "​fictif"​.+Il existe plusieurs méthodes :\\  
 +\\ 
  
-Il faut dans ce cas résoudre l'IP du serveur pour un domaine fictif côté client. Cela se fait en [[:​tutoriel:​comment_modifier_un_fichier|éditant le fichier]] ''/​etc/​hosts'' ​côté ​client avec les [[:​sudo|droits d'​administration]] pour y ajouter la ligne : +  * 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)\\  
-<file - hosts>​127.0.0.1 example</​file>​ +\\  
-où ''​127.0.0.1''​ est l'​adresse IP du serveur (locale dans ce cas) et ''​example''​ est le nom de domaine choisi.\\+ 
 +  * 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.\\  
 +\\  
 + 
 +  * 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]]) (Voir la [[:​hosts|documentation concernant le fichier hosts]])
  
-Avec la directive ''​ServerName example''​ dans le //​VirtualHost//,​ l'​hôte virtuel sera accessible depuis ce client à l'​adresse [[http://​example/​]].+Avec la directive ''​ServerName example.lan''​ dans le //​VirtualHost//,​ l'​hôte virtuel sera accessible depuis ce client à l'​adresse [[http://​example.lan/]].
  
-Cela peut être très pratique en phase de développement sur une machine ou un réseau localpar exemple.+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>​
  
 ===== HTTPS ===== ===== HTTPS =====
  
-HTTPS permet de chiffrer les communications entre le navigateur et Apache ​au moyen du protocole SSL/TLS, et de garantir l'​authenticité de votre serveur ​(au moyen d'un certificat). Cela empêche qui que ce soit de récupérer ("​sniffer"​) des informations sensibles ​(tels que des mots de passes) ​en particulier lorsqu'​on se connecte depuis un réseau public, ou empêche un autre serveur de se faire passer pour le vôtre.+HTTPS permet de chiffrer les communications entre le navigateur et le serveur web au moyen du protocole SSL/TLS, et de garantir l'​authenticité de votre serveur au moyen d'un certificat. Cela empêche qui que ce soit de récupérer (« sniffer ») des informations sensibles, telles ​que des mots de passe, ​en particulier lorsqu'​on se connecte depuis un réseau public, ou empêche un autre serveur de se faire passer pour le vôtre.
  
-Il n'​est ​ni nécessaire, ni faisable ​de mettre en place HTTPS avec un certificat valide sur un serveur de développement local.+Il n'​est ​pas nécessaire de mettre en place HTTPS avec un certificat valide sur un serveur de développement local.
  
 Pour rendre disponible les sites de manière sécurisée via HTTPS avec des certificats valides, la solution la plus simple est d'​utiliser l'​outil **[[https://​certbot.eff.org/​|Certbot]]** de [[https://​letsencrypt.org/​|Let'​s Encrypt]]. Pour rendre disponible les sites de manière sécurisée via HTTPS avec des certificats valides, la solution la plus simple est d'​utiliser l'​outil **[[https://​certbot.eff.org/​|Certbot]]** de [[https://​letsencrypt.org/​|Let'​s Encrypt]].
Ligne 230: Ligne 232:
 ==== Mise en place de HTTPS avec Certbot ==== ==== Mise en place de HTTPS avec Certbot ====
  
-Prérequis : +Prérequis :
   * avoir un ou plusieurs noms de domaine enregistrés,​ pointant sur le serveur depuis plus de 48 heures.   * avoir un ou plusieurs noms de domaine enregistrés,​ pointant sur le serveur depuis plus de 48 heures.
   * avoir un serveur web apache déjà configuré, fonctionnel et accessible publiquement.   * avoir un serveur web apache déjà configuré, fonctionnel et accessible publiquement.
Ligne 250: Ligne 252:
 Après cette opération les sites devraient être accessibles en HTTPS de manière sécurisée,​ sans que les navigateurs affichent de message d'​alerte. Après cette opération les sites devraient être accessibles en HTTPS de manière sécurisée,​ sans que les navigateurs affichent de message d'​alerte.
  
-<​note>​Grâce à l'​option ''​--apache'',​ Certbot s'​occupe automatiquement de créer des fichiers de configuration de la forme ''/​etc/​apache2/​sites-available/​example.com-le-ssl.conf''​ pour les hôtes virtuels en HTTPS sur le port 443 et de les activer (''​-le-ssl''​ pour //​Let'​s Encrypt//​).</​note>​+<​note>​Grâce à l'​option ''​%%--%%apache'',​ Certbot s'​occupe automatiquement de créer des fichiers de configuration de la forme ''/​etc/​apache2/​sites-available/​example.com-le-ssl.conf''​ pour les hôtes virtuels en HTTPS sur le port 443 et de les activer (''​-le-ssl''​ pour //​Let'​s Encrypt//​).</​note>​
  
 === Renouvellement automatique === === Renouvellement automatique ===
Ligne 264: Ligne 266:
 Les directives de chaque fichier ''​.htaccess''​ s'​appliquent au répertoire dans lequel il se trouve, ainsi que tous ses descendants (sous-repertoires,​ sous-sous-repertoires,​ etc.). Les directives de chaque fichier ''​.htaccess''​ s'​appliquent au répertoire dans lequel il se trouve, ainsi que tous ses descendants (sous-repertoires,​ sous-sous-repertoires,​ etc.).
  
-C'est la directive ​**[[https://​httpd.apache.org/​docs/​current/​fr/​mod/​core.html#​allowoverride|AllowOverride]]**, spécifiée dans une section ''<​Directory>''​ de l'​[[#​hotes_virtuels|hôte virtuel]] qui définit si les fichiers ''​.htaccess''​ doivent être pris en compte, ou pas, pour ce répertoire et ses descendants. Elle peut prendre ​la valeur ​''​All''​ ou ''​None''​.+C'est la directive ​''​[[https://​httpd.apache.org/​docs/​current/​fr/​mod/​core.html#​allowoverride|AllowOverride]]''​, spécifiée dans une section ''<​Directory>''​ de l'​[[#​hotes_virtuels|hôte virtuel]] qui définit si les fichiers ''​.htaccess''​ doivent être pris en compte, ou pas, pour ce répertoire et ses descendants. Elle peut prendre ​les valeurs ​''​All'' ​(on autorises //toutes// les directives de configuration à être modifiées) ​ou ''​None'' ​(aucune directives),​ ou une liste détaillée des directives dont on autorise la modifications.
  
 <note tip>Ces fichiers sont très pratiques pour redéfinir des paramètres sur un serveur mutualisé à l'​administration duquel on n'a pas accès, ou pour définir dynamiquement des règles spécifiques à certaines solutions web (comme la [[#​mod_rewrite|réécriture d'​URL]]).</​note>​ <note tip>Ces fichiers sont très pratiques pour redéfinir des paramètres sur un serveur mutualisé à l'​administration duquel on n'a pas accès, ou pour définir dynamiquement des règles spécifiques à certaines solutions web (comme la [[#​mod_rewrite|réécriture d'​URL]]).</​note>​
Ligne 272: Ligne 274:
 L'​index est le contenu affiché par défaut par Apache lorsqu'​on appelle un répertoire sans spécifier de [[:​web#​url|nom de page web]] particulière. L'​index est le contenu affiché par défaut par Apache lorsqu'​on appelle un répertoire sans spécifier de [[:​web#​url|nom de page web]] particulière.
  
-L'​index est définit par la directive ​**[[https://​httpd.apache.org/​docs/​current/​mod/​mod_dir.html#​directoryindex|DirectoryIndex]]** qui détermine quels fichiers Apache doit traiter par défaut. Chaque nom de fichier est séparé par un espace et listé par ordre de priorité.\\+L'​index est définit par la directive ​''​[[https://​httpd.apache.org/​docs/​current/fr/​mod/​mod_dir.html#​directoryindex|DirectoryIndex]]'' ​qui détermine quels fichiers Apache doit traiter par défaut. Chaque nom de fichier est séparé par un espace et listé par ordre de priorité.\\
 Par défaut, ''​DirectoryIndex''​ a la valeur ''​index.html index.cgi index.pl index.php index.xhtml index.htm''​. Par défaut, ''​DirectoryIndex''​ a la valeur ''​index.html index.cgi index.pl index.php index.xhtml index.htm''​.
  
 Si Apache ne trouve aucun des fichiers mentionnés par ''​DirectoryIndex'',​ il essaie de récupérer une liste du contenu du répertoire,​ afin que le navigateur l'​affiche de la même manière qu'un gestionnaire de fichier.\\ Si Apache ne trouve aucun des fichiers mentionnés par ''​DirectoryIndex'',​ il essaie de récupérer une liste du contenu du répertoire,​ afin que le navigateur l'​affiche de la même manière qu'un gestionnaire de fichier.\\
-On peut activer ou désactiver ce listing avec respectivement les directives ​**[[https://​httpd.apache.org/​docs/​current/​mod/​core.html#​options|Options +Indexes]]** ou **[[https://​httpd.apache.org/​docs/​current/​mod/​core.html#​options|Options -Indexes]]**.\\+On peut activer ou désactiver ce listing avec respectivement les directives ​''​[[https://​httpd.apache.org/​docs/​current/fr/​mod/​core.html#​options|Options +Indexes]]'' ​ou ''​[[https://​httpd.apache.org/​docs/​current/fr/​mod/​core.html#​options|Options -Indexes]]''​.\\
 Pour des raisons de sécurité, il est généralement préférable de laisser cette option désactivée. Dans ce cas, et faute de fichier index, c'est une erreur 403 qui s'​affiche,​ car l'​utilisateur n'a pas la permission de lister le contenu du répertoire. Pour des raisons de sécurité, il est généralement préférable de laisser cette option désactivée. Dans ce cas, et faute de fichier index, c'est une erreur 403 qui s'​affiche,​ car l'​utilisateur n'a pas la permission de lister le contenu du répertoire.
  
-<​note>​Toutes ces directives peuvent être définies dans une section ​//[[#​hotes_virtuels|<​Directory>​]]// ou dans un fichier ​//[[#​.htaccess]]//.</​note>​+<​note>​Toutes ces directives peuvent être définies dans une section ​''​[[#​hotes_virtuels|<​Directory>​]]'' ​ou dans un fichier ​''​[[#​.htaccess]]''​.</​note>​
  
 ===== Modules ​ ===== ===== Modules ​ =====
Ligne 288: Ligne 290:
 ==== mod_php ==== ==== mod_php ====
  
-[[:PHP]] est un langage de programmation ​et un interpréteur ​qui permet principalement de générer du contenu HTML. C'est donc une solution très largement utilisée pour créer des applications web ou des [[wpfr>​Page_web_dynamique|sites internet dynamiques]].+[[:PHP]] est un langage de programmation qui permet principalement de générer du contenu HTML. C'est donc une solution très largement utilisée pour créer des applications web ou des [[wpfr>​Page_web_dynamique|sites internet dynamiques]].
  
 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// ​permet de l'​utiliser comme une extension d'Apache. C'est la méthode la plus simple 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 ​PHP [[http://​php.net/​manual/​fr/​install.fpm.php|en FastCGI]]. C'est une solution plus souple et mieux optimisée pour des sites destinés à supporter un traffic important, mais elle est plus complexe à mettre en oeuvre. 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 :
Ligne 309: Ligne 311:
 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.\\
 Ces services utilisent parfois une terminologie exotique pour mentionner cette pratique : [[:​WordPress]] parle par ex. de //​permalinks//​.\\ Ces services utilisent parfois une terminologie exotique pour mentionner cette pratique : [[:​WordPress]] parle par ex. de //​permalinks//​.\\
-On peut aussi s'en servir pour déployer une [[https://​fr.wikipedia.org/​wiki/​Interface_de_programmation|API]] web propre.\\+On peut aussi s'en servir pour déployer une [[wpfr>Interface_de_programmation|API]] web propre.\\
 On utilise aussi parfois cette méthode afin de mettre en place des [[https://​httpd.apache.org/​docs/​current/​fr/​rewrite/​remapping.html|redirections web]] un peu complexes. On utilise aussi parfois cette méthode afin de mettre en place des [[https://​httpd.apache.org/​docs/​current/​fr/​rewrite/​remapping.html|redirections web]] un peu complexes.
  
Ligne 329: Ligne 331:
 # [L]=[last] signifie que si cette règle s'​applique on n'en cherche pas d'​autre</​file>​ # [L]=[last] signifie que si cette règle s'​applique on n'en cherche pas d'​autre</​file>​
  
-<​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 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 :
 <​code>​ <​code>​
     <​Directory /​var/​www/​html>​     <​Directory /​var/​www/​html>​
Ligne 363: Ligne 365:
  
 ==== mod_userdir ==== ==== mod_userdir ====
- 
-<​note>​Ce module est également documenté sur [[:​xampp#​modifier_le_dossier_racine_du_serveur_apache|la page xampp]].</​note>​ 
  
 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''​).\\
Ligne 398: Ligne 398:
  
 # Cet en-tête empêchera les autres sites d'​intégrer les pages de ce site dans des frames. # Cet en-tête empêchera les autres sites d'​intégrer les pages de ce site dans des frames.
-# C'est une mesure de porrection ​contre les attaques par détournement de clic (clickjacking)+# C'est une mesure de protection ​contre les attaques par détournement de clic (clickjacking)
 # Attention cet en-tête est rendue obsolète par les CSP # Attention cet en-tête est rendue obsolète par les CSP
 # #
Ligne 446: Ligne 446:
 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 des raisons ​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 ​rester ​//​www-data//​ :+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 484: Ligne 484:
  
   * Vérifiez les [[#​permissions]] concernant les fichiers du contenu web que vous souhaitez partager vis-à-vis de l'​utilisateur et du groupe //​www-data//​.   * Vérifiez les [[#​permissions]] concernant les fichiers du contenu web que vous souhaitez partager vis-à-vis de l'​utilisateur et du groupe //​www-data//​.
-  * Vérifiez aussi la valeur de la directive [[https://​httpd.apache.org/​docs/​current/​fr/​howto/​access.html|Require]] : ''​Require all granted''​ pour toujours autoriser l'​accès aux ressources. ​+  * Vérifiez aussi la valeur de la directive ​''​[[https://​httpd.apache.org/​docs/​current/​fr/​howto/​access.html|Require]]'' ​: ''​Require all granted''​ pour toujours autoriser l'​accès aux ressources. ​
   * Il est aussi possible que cette erreur soit affichée faute de fichier [[#index]].   * Il est aussi possible que cette erreur soit affichée faute de fichier [[#index]].
  
Ligne 491: Ligne 491:
 Cette erreur indique que le contenu demandé n'a pas été trouvé. Cette erreur indique que le contenu demandé n'a pas été trouvé.
   * En premier lieu vérifiez évidemment l'​existence des contenus concernés.   * En premier lieu vérifiez évidemment l'​existence des contenus concernés.
-  * Le chemin vers ce contenu sur l'​espace disque, relatif à la directive ​//[[#​hotes_virtuels|DocumentRoot]]//, doit correspondre au [[:​web#​url|chemin de l'​URL]] appelée.+  * Le chemin vers ce contenu sur l'​espace disque, relatif à la directive ​''​[[#​hotes_virtuels|DocumentRoot]]''​, doit correspondre au [[:​web#​url|chemin de l'​URL]] appelée.
   * L'​erreur peut aussi être due à une mauvaise [[#​mod_rewrite|réécriture d'​URL]].   * L'​erreur peut aussi être due à une mauvaise [[#​mod_rewrite|réécriture d'​URL]].
  
Ligne 498: Ligne 498:
 Il s'agit d'une erreur fatale du serveur, qui peut être par exemple liée à une erreur de syntaxe dans un fichier [[#​.htaccess]]. Il s'agit d'une erreur fatale du serveur, qui peut être par exemple liée à une erreur de syntaxe dans un fichier [[#​.htaccess]].
  
-Consultez le log d'​erreur de votre hôte virtuel pour en savoir plus.+Consultez le [[#​problemes_courants|log d'​erreur]] de votre hôte virtuel pour en savoir plus.
  
 ==== 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 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 ====
Ligne 519: Ligne 522:
  
    * (en) [[https://​apache.org/​|Site officiel du projet Apache]]    * (en) [[https://​apache.org/​|Site officiel du projet Apache]]
-   * [[https://​httpd.apache.org/​docs/​current/​|Documentation Apache officielle en français]]+   * [[https://​httpd.apache.org/​docs/​current/fr/​|Documentation Apache officielle en français]]
    * [[tutoriel/​securiser_apache2_avec_ssl|Sécuriser Apache 2 avec SSL]]    * [[tutoriel/​securiser_apache2_avec_ssl|Sécuriser Apache 2 avec SSL]]
    * [[:​lamp|installer un serveur LAMP]]    * [[:​lamp|installer un serveur LAMP]]
  • apache2.1644944421.txt.gz
  • Dernière modification: Le 15/02/2022, 18:00
  • par bruno