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
Prochaine révision Les deux révisions suivantes
apache2 [Le 16/05/2018, 13:46]
krodelabestiole ortograf
apache2 [Le 18/01/2019, 20:19]
krodelabestiole [Permissions] déplacement -R (détail mais ça simplifie l'édition après copier coller)
Ligne 1: Ligne 1:
-{{tag>​réseau serveur internet}}+{{tag>​réseau serveur internet ​Xenial Bionic}}
  
 ---- ----
Ligne 13: Ligne 13:
 <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 =====
Ligne 23: Ligne 23:
 À 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).
  
-Un message //It Works!// devrait s'​afficher dans votre navigateur. Il s'agit du contenu du fichier ​///​var/​www/​html/​index.html// qui est affiché par défaut.+Un message //It Works!// devrait s'​afficher dans votre navigateur. Il s'agit du contenu du fichier ​''​/​var/​www/​html/​index.html'' ​qui est affiché par défaut.
  
 ===== Lancement ===== ===== Lancement =====
  
-Apache 2 se lance par défaut dès son installation,​ et se relance automatiquement à chaque démarrage.+Apache 2 se lance par défaut 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.
  
 ==== Empêcher Apache de démarrer automatiquement ​ ==== ==== Empêcher Apache de démarrer automatiquement ​ ====
Ligne 63: Ligne 63:
 Pour voir les modules d'​Apache chargés : Pour voir les modules d'​Apache chargés :
 <​code>​sudo apache2ctl -M</​code>​ <​code>​sudo apache2ctl -M</​code>​
 +
 ===== Mode de fonctionnement sommaire ===== ===== Mode de fonctionnement sommaire =====
  
Ligne 71: Ligne 72:
   * 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 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.
   * 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 ​sur le même port (80 ou 443).+  * Le serveur renvoie ce contenu à l'IP du navigateur ​depuis ​le même port (80 ou 443).
   * 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.).
  
Ligne 79: Ligne 80:
  
 Un seul serveur Apache permet de déployer simultanément plusieurs sites et services qu'il faut configurer individuellement.\\ Un seul serveur Apache permet de déployer simultanément plusieurs sites et services qu'il faut configurer individuellement.\\
-Pour plus de clarté, la configuration d'​Apache2 est donc morcelée, mais tous les fichiers de configuration se situent dans le répertoire ​///​etc/​apache2// :+Pour plus de clarté, la configuration d'​Apache2 est donc morcelée, mais 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 
-  * //sites-enabled// contient des [[:​lien_physique_et_symbolique|liens symboliques]] vers les configurations,​ dans //site-available//, des sites activés ​+  * ''​sites-enabled'' ​contient des [[:​lien_physique_et_symbolique|liens symboliques]] vers les configurations,​ dans ''​site-available''​, des sites activés ​
  
-  * //conf-available// contient les fichiers de configuration des **autres services** disponibles +  * ''​conf-available'' ​contient les fichiers de configuration des **autres services** disponibles 
-  * //conf-enabled// contient des [[:​lien_physique_et_symbolique|liens symboliques]] vers les configurations,​ dans //conf-available//, des autres services activés+  * ''​conf-enabled'' ​contient des [[:​lien_physique_et_symbolique|liens symboliques]] vers les configurations,​ dans ''​conf-available''​, des autres services activés
  
-  * //mods-available// contient les fichiers de configuration des **modules** d'​Apache disponibles +  * ''​mods-available'' ​contient les fichiers de configuration des **modules** d'​Apache disponibles 
-  * //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''​''​envars'' ​et ''​ports.conf'' ​n'ont pas à être modifiés. 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 :
  
 <​code>​sudo a2ensite [configuration d'un site à activer] <​code>​sudo a2ensite [configuration d'un site à activer]
Ligne 103: Ligne 104:
 sudo a2dismod [configuration d'un module à désactiver]</​code>​ sudo a2dismod [configuration d'un module à désactiver]</​code>​
  
-Cela aura pour effet de créer ou supprimer les liens symboliques correspondants dans les répertoires ​//xxx-enabled//.\\+Cela aura pour effet de créer ou supprimer les liens symboliques correspondants dans les répertoires ​''​xxx-enabled''​.\\
 Apache prendra alors en compte, ou pas, les fichiers de configuration concernés après rechargement : Apache prendra alors en compte, ou pas, les fichiers de configuration concernés après rechargement :
 <​code>​sudo systemctl reload apache2</​code>​ <​code>​sudo systemctl reload apache2</​code>​
  
-<​note>​Par défaut Apache ne prend en compte que les fichiers portant l'​extension ​//.conf// (ou //.load//, seulement pour les modules).</​note>​+<​note>​Par défaut Apache ne prend en compte que les fichiers portant l'​extension ​''​.conf'' ​(ou ''​.load''​, seulement pour les modules).</​note>​
  
 ==== Configuration des ports d'​écoute ==== ==== Configuration des ports d'​écoute ====
  
-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é.
  
Ligne 118: Ligne 119:
 ===== Hôtes virtuels ===== ===== Hôtes virtuels =====
  
-Sur Apache, chaque site ou service ​correspond en principe à un hôte virtuel (//​**[[https://​httpd.apache.org/​docs/​current/​fr/​vhosts/​examples.html|VirtualHost]]**//​ en anglais).+Avec Apache, chaque site ou application web correspond en principe à un hôte virtuel (//​**[[https://​httpd.apache.org/​docs/​current/​fr/​vhosts/​examples.html|VirtualHost]]**//​ en anglais)
 + 
 +Chaque hôte virtuel est défini par un fichier de configuration indépendant,​ qu'on trouve ou qu'on créé dans le répertoire ''/​etc/​apache2/​sites-available/''​.
  
 ==== Par défaut ==== ==== Par défaut ====
  
-Par défaut, il existe 2 hôtes virtuels. ​+Par défaut, il existe 2 hôtes virtuels. 
 + 
 +<note important>​ 
 +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]]).\\  
 +De plus ces fichiers existant par défaut peuvent éventuellement être écrasés lors de mises à jour majeures du système. 
 +</​note>​
  
-Le premier est défini dans le fichier ​///​etc/​apache2/​sites-available/​000-default.conf// :+Le premier ​//​VirtualHost// ​est défini dans le fichier ​''​/​etc/​apache2/​sites-available/​000-default.conf''​. Voici son contenu sans les commentaires ​:
  
 <file - 000-default.conf><​VirtualHost *:80> <file - 000-default.conf><​VirtualHost *:80>
Ligne 134: Ligne 143:
  
 ^ directive ^ description ^ ^ directive ^ description ^
-| <​file><​VirtualHost *:​80></​file>​ | On déclare l'​hôte virtuel, il doit répondre ​à toutes les adresses IP qui s'​adressent à lui (*) sur le port 80. On peut ici éventuellement spécifier une adresse IP unique à laquelle répondra Apache pour un hôte virtuel donné (par ex. pour des raisons de sécurité ​ou de privauté), ou choisir ​d'​écouter ​un port exotique. |+| <​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''​. |
 | <​file>​ErrorLog ${APACHE_LOG_DIR}/​error.log | <​file>​ErrorLog ${APACHE_LOG_DIR}/​error.log
-CustomLog ${APACHE_LOG_DIR}/​access.log combined</​file>​ | Ce sont des directives relatives au log d'​erreur et au log d'​accès de cet hôte virtuel. Ceux-ci seront donc écrits dans le répertoire ​//APACHE_LOG_DIR//, qui est par défaut ​///​var/​log/​apache2// sur ubuntu. |+CustomLog ${APACHE_LOG_DIR}/​access.log combined</​file>​ | Ce sont des directives relatives au log d'​erreur et au log d'​accès de cet hôte virtuel. Ceux-ci seront donc écrits dans le répertoire ​''​APACHE_LOG_DIR''​, qui est par défaut ​''​/​var/​log/​apache2'' ​sur ubuntu. |
 | <​file></​VirtualHost></​file>​ | Fin de la section concernant cet hôte virtuel. | | <​file></​VirtualHost></​file>​ | Fin de la section concernant cet hôte virtuel. |
  
-Le second VirtualHost est défini dans le fichier ​///​etc/​apache2/​sites-available/​default-ssl.conf// et contient une configuration par défaut pour HTTPS. Il écoute donc sur le port 443 et énonce des directives spécifiques à l'​usage de SSL. La racine de l'​hôte (directive ​//DocumentRoot//) correspond également à ///​var/​www/​html//.+Le second ​//VirtualHost// est défini dans le fichier ​''​/​etc/​apache2/​sites-available/​default-ssl.conf'' ​et contient une configuration par défaut pour HTTPS. Il écoute donc sur le port 443 et énonce des directives spécifiques à l'​usage de SSL. La racine de l'​hôte (directive ​''​DocumentRoot''​) correspond également à ''​/​var/​www/​html''​.
  
-<note tip>On remarque donc ici que si on a un seul site à mettre en place, on peut déjà le rendre disponible simplement en le déployant dans le répertoire ​///​var/​www/​html// : par défaut Apache affichera la page d'​accueil qui doit en principe être écrite dans un fichier ​//index.html// ou générée par un script ​//index.php// (voir [[#​index]]).</​note>​+<note tip>On remarque donc ici que si on a un seul site simple ​à mettre en place, on peut déjà ​éventuellement ​le rendre disponible simplement en le déployant dans le répertoire ​''​/​var/​www/​html'' ​: par défaut Apache affichera la page d'​accueil qui doit en principe être écrite dans un fichier ​''​index.html'' ​ou générée par un script ​''​index.php'' ​(voir [[#index]]).\\ 
 +Cependant il est plutôt conseillé de créer un nouvel hôte virtuel dans un nouveau fichier, même pour un seul site.</​note>​
  
 ==== 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>​+<​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]].
  
-Une configuration courante pour un serveur web mettant à disposition plusieurs sites internet, est d'avoir plusieurs noms de domaine (ou sous-domaines) pointant ​sur le serveur, chacun affichant un site différent.\\ +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>​
-Pour mettre en place cette configuration il faut donc créer un hôte virtuel par nom de domaine ou sous-domaine.+
  
-Pour faire les choses ​dans les règles, ​chaque hôte virtuel ​doit avoir son fichier de configuration dédié. Pour s'y repérer on peut le nommer par le nom de domaine auquel il correspond, suivi de l'​extension ​//.conf//. Pour un nom de domaine //​example.com//​ on créera donc un fichier ​///​etc/​apache2/​sites-available/​example.com.conf//.+Apache recommande de créer un fichier de configuration ​dans lequel est défini un hôte virtuel pour chaque ​site ou application web dans le répertoire ''/​etc/​apache2/​sites-available/''​. 
 + 
 +Chaque hôte virtuel peut être appelé en fonction d'un nom de domaine ou sous-domaine,​ c'est la configuration la plus courante. Mais on peut également définir un numéro de port particulier,​ ou une adresse IP particulière (si le serveur en possède plusieurs) pour laquelle on affichera tel ou tel contenu web. 
 + 
 +Chaque ​hôte virtuel ​ayant son fichier de configuration dédié, pour s'y repérer on peut le nommer par le nom de domaine auquel il correspond, suivi de l'​extension ​''​.conf''​. Pour un nom de domaine //​example.com//​ on créera donc un fichier ​''​/​etc/​apache2/​sites-available/​example.com.conf''​.
  
 Voici un exemple de contenu pour ce fichier : Voici un exemple de contenu pour ce fichier :
  
 <file - example.com.conf><​VirtualHost *:80> <file - example.com.conf><​VirtualHost *:80>
- DocumentRoot "/​var/​www/​example"​ 
  ServerName example.com  ServerName example.com
  ServerAlias www.example.com  ServerAlias www.example.com
 + DocumentRoot "/​var/​www/​example"​
  <​Directory "/​var/​www/​example">​  <​Directory "/​var/​www/​example">​
- Options FollowSymLinks+ Options ​+FollowSymLinks
  AllowOverride all  AllowOverride all
  Require all granted  Require all granted
Ligne 170: Ligne 183:
  
 ^ directive ^ description ^ ^ directive ^ description ^
-| <​file><​VirtualHost *:​80></​file>​ | On accepte les connections de n'​importe quelle IP (//*//) sur le port 80. | +| <​file><​VirtualHost *:​80></​file>​ | On accepte les connexions sur n'​importe quelle IP du serveur ​(''​*''​) sur le port 80. |
-| <​file>​DocumentRoot "/​var/​www/​example"</​file>​ | On placera les fichiers du site dans le répertoire ///​var/​www/​example//​. |+
 | <​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 ​<​nowiki>​www.example.com</​nowiki>​</​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. | 
-| <​file><​Directory "/​var/​www/​example"></​file>​ | On spécifie dans cette section des règles pour le répertoire ​///​var/​www/​example// sous cet hôte virtuel. | +| <​file>​DocumentRoot "/​var/​www/​example"</​file>​ | On placera les fichiers du site dans le répertoire ''/​var/​www/​example''​. | 
-| <​file>​Options FollowSymLinks</​file>​ | Apache suivra les liens symboliques qu'il trouvera dans ce répertoire (et ses descendants). |+| <​file><​Directory "/​var/​www/​example"></​file>​ | On spécifie dans cette section des règles pour le répertoire ​''​/​var/​www/​example'' ​sous cet hôte virtuel. | 
 +| <​file>​Options ​+FollowSymLinks</​file>​ | Apache suivra les [[:​lien_physique_et_symbolique|liens symboliques]] qu'il trouvera dans ce répertoire (et ses descendants). |
 | <​file>​AllowOverride all</​file>​ | On pourra inclure une configuration personnalisée via un fichier [[#​.htaccess]]. | | <​file>​AllowOverride all</​file>​ | On pourra inclure une configuration personnalisée via un fichier [[#​.htaccess]]. |
-| <​file>​Require all granted</​file>​ | Tous les visiteurs pourront accéder au contenu de ce répertoire. Voir la [[https://​httpd.apache.org/​docs/​current/​fr/​mod/​mod_authz_core.html#​require|documentation officielle]] pour modifier ce comportement. |+| <​file>​Require all granted</​file>​ | Tous les visiteurs pourront accéder au contenu de ce répertoire. Voir la [[https://​httpd.apache.org/​docs/​current/​fr/​mod/​mod_authz_core.html#​require|documentation officielle]] pour modifier ce comportement. Pour des raisons de sécurité ou de privacité on peut par exemple limiter l'​accès au serveur à seulement une ou certaines adresses IP avec une directive du type ''​Require ip 192.168.1.10''​. |
 | <​file>​ErrorLog /​var/​log/​apache2/​error.example.com.log | <​file>​ErrorLog /​var/​log/​apache2/​error.example.com.log
-CustomLog /​var/​log/​apache2/​access.example.com.log combined</​file>​ | Il est important ​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 : 
 +<​code>​sudo a2ensite example.com</​code>​ 
 +On recharge ensuite la configuration d'​Apache : 
 +<​code>​sudo systemctl reload apache2</​code>​ 
 + 
 +<note tip>On peut définir un hôte virtuel par un nom de domaine même sans avoir de nom de domaine enregistré chez un registrar.
  
-<note tip>On peut exploiter cette fonctionnalité par nom de domaine même sans avoir de nom de domaine enregistré chez un registrar : il suffit de résoudre l'​IP ​de n'​importe quel domaine ​dans le fichier ​///etc/hosts// du côté client :+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 :
 <file - hosts>​127.0.0.1 example</​file>​ <file - hosts>​127.0.0.1 example</​file>​
-Avec la directive ​//ServerName example//, l'​hôte virtuel sera accessible à l'​adresse [[http://​example/​]].+où ''​127.0.0.1''​ est l'​adresse IP du serveur (locale dans ce cas) et ''​example''​ est le nom de domaine choisi.\\ 
 +(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/​]]. 
 + 
 +Cela peut être très pratique en phase de développement sur une machine ou un réseau local, par exemple.</​note>​
  
-Cela peut être très pratique lorsqu'​on développe de nombreux projets sur une machine ou un réseau local, par exemple.</​note>​ 
 ===== HTTPS ===== ===== HTTPS =====
  
Ligne 212: Ligne 236:
 === Installation de Certbot === === Installation de Certbot ===
  
-Il faut installer ​le paquet //certbot// en [[:​ppa#​ajout_d_un_ppa_a_vos_sources_logicielles|installant ​le dépôt ​PPA]] officiel ​+Pour installer ​Certbot, ​[[:​ppa#​ajout_d_un_ppa_a_vos_sources_logicielles|ajoutez ​le PPA]] officiel ​**ppa:​certbot/​certbot**, puis installez le paquet [[apt>​python-certbot-apache]] : 
- +<​code>​sudo apt install python-certbot-apache</​code>​
-<​code>​sudo apt update +
-sudo apt install software-properties-common +
-sudo add-apt-repository ​ppa:​certbot/​certbot +
-sudo apt update +
-sudo apt install python-certbot-apache</​code>​+
  
 === Utilisation de Certbot === === Utilisation de Certbot ===
Ligne 229: Ligne 248:
 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 ===
  
-Pour information c'est la commande ​//certbot renew// qui permet de renouveler les certificats très simplement, mais Certbot créé automatiquement une [[:​cron|tâche cron]] à cet effet dans ///​etc/​cron.d/​certbot//.+Pour information c'est la commande ​''​certbot renew'' ​qui permet de renouveler les certificats très simplement, mais Certbot créé automatiquement une [[:​cron|tâche cron]] à cet effet dans ''​/​etc/​cron.d/​certbot''​.
  
 Le script est lancé automatiquement toutes les 12 heures, mais les certificats ne seront renouvelés que si nécessaire. En principe il n'y a donc rien à faire. Le script est lancé automatiquement toutes les 12 heures, mais les certificats ne seront renouvelés que si nécessaire. En principe il n'y a donc rien à faire.
 +
 ===== .htaccess ​ ===== ===== .htaccess ​ =====
  
-En plus des fichiers de configuration situés dans ///​etc/​apache2//, Apache nous permet de définir des configurations tierces pour certains répertoires en plaçant des fichiers nommés ​//.htaccess// directement avec les autres fichiers du contenu web. (Le point au début du nom du fichier en fait un fichier caché par défaut.)+En plus des fichiers de configuration situés dans ''​/​etc/​apache2''​, Apache nous permet de définir des configurations tierces pour certains répertoires en plaçant des fichiers nommés ​''​.htaccess'' ​directement avec les autres fichiers du contenu web. (Le point au début du nom du fichier en fait un fichier caché par défaut.)
  
-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 la valeur ​''​All'' ​ou ''​None''​.
  
 <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 251: Ligne 271:
  
 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/​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/​mod/​core.html#​options|Options +Indexes]]** ou **[[https://​httpd.apache.org/​docs/​current/​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.
Ligne 262: Ligne 282:
  
 Il est possible d'​ajouter des modules à Apache afin d'​étendre les fonctionnalités du serveur web.\\ Il est possible d'​ajouter des modules à Apache afin d'​étendre les fonctionnalités du serveur web.\\
-Les modules disponibles sont répertoriés ici : ///​etc/​apache2/​mods-available//+Les modules disponibles sont répertoriés ici : ''​/​etc/​apache2/​mods-available''​
  
 ==== mod_php ==== ==== mod_php ====
Ligne 285: Ligne 305:
 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|URL]] par une chaîne de caractère en concordance avec la structure et le contenu du site.
  
-De nombreux services ​on recour ​à 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 [[https://​fr.wikipedia.org/​wiki/​Interface_de_programmation|API]] web propre.\\
Ligne 320: Ligne 340:
  
 Pour activer ce module : Pour activer ce module :
-<​code>​sudo a2enmod proxy+<​code>​sudo a2enmod proxy proxy_http proxy_wstunnel
 sudo systemctl reload apache2</​code>​ sudo systemctl reload apache2</​code>​
  
Ligne 331: Ligne 351:
  SetEnv proxy-sendchunked 1  SetEnv proxy-sendchunked 1
 </​Location></​file>​ </​Location></​file>​
 +
 ==== mod_userdir ==== ==== mod_userdir ====
  
 <​note>​Ce module est également documenté sur [[:​xampp#​modifier_le_dossier_racine_du_serveur_apache|la page xampp]].</​note>​ <​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''​).\\
 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 //<​nowiki>​http://​example.com/​~nom_de_lutilisateur</​nowiki>//,​ ou dans la plupart des cas : //<​nowiki>​http://​localhost/​~nom_de_lutilisateur</​nowiki>//​.
  
-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 :
 <​code>​mkdir ~/​public_html <​code>​mkdir ~/​public_html
 echo 'Mon site personnel'​ > ~/​public_html/​index.html echo 'Mon site personnel'​ > ~/​public_html/​index.html
Ligne 348: Ligne 369:
  
 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.\\
 +Pour l'​activer il faut modifier le fichier /​etc/​apache2/​mods-available/​php7.x.conf en commentant les lignes concernées.</​note>​
  
 ==== mod_headers ==== ==== mod_headers ====
Ligne 355: Ligne 379:
 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.
  
-Pour appliquer globalement les directives proposées, ouvrez (ou créez s'il n’existe pas) le fichier ​///​etc/​apache2/​mods_available/​headers.conf// et placez-y ceci :+Pour appliquer globalement les directives proposées, ouvrez (ou créez s'il n’existe pas) le fichier ​''​/​etc/​apache2/​mods_available/​headers.conf'' ​et placez-y ceci :
  
 <file - headers.conf>​ <file - headers.conf>​
Ligne 409: Ligne 433:
 ==== Permissions ==== ==== Permissions ====
  
-Par défaut sur Ubuntu, Apache est exécuté par l'​utilisateur //​www-data//,​ qui appartient au groupe //​www-data//​. Il prend donc les permissions de cet utilisateur.\\ +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 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 des raisons 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 rester //​www-data//​ :
-<​code>​sudo chown $USER:​www-data /​var/​www/​example ​-R</​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]] ​750 (rwx r-x ---) pour les répertoires,​ et 640 (rw- r-- ---) pour les fichiers : +On attribue donc les [[:​droits]] ​''​rwx r-x ---''​ (750) pour les répertoires,​ et ''​rw- r-- ---''​ (640) pour les fichiers : 
-<​code>​sudo find /​var/​www/​example ​-type d -exec chmod 750 {} \; +<​code>​chmod --rwx,​u+rwX,​g+rX ​/​var/​www/​example</​code>​ 
-sudo find /​var/​www/​example ​-type f -exec chmod 640 {} \;</​code>​+(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 770 (rwx rwx ---) pour les répertoires et 660 (rw- rw- ---) 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>​sudo find /​var/​www/​example/​upload ​-type d -exec chmod 770 {} \; +<​code>​chmod -R g+w /​var/​www/​example/​upload</​code>​
-sudo find /​var/​www/​example/​upload ​-type f -exec chmod 660 {} \;</​code>​+
  
 ==== Fail2ban ==== ==== Fail2ban ====
Ligne 432: Ligne 455:
 ===== Problèmes courants ===== ===== Problèmes courants =====
  
-<note tip>En cas d'​erreur du serveur, consultez avant tout les rapports d'​erreurs dans le répertoire ​///​var/​log/​apache2//.+<note tip>En cas d'​erreur du serveur, consultez avant tout les rapports d'​erreurs dans le répertoire ​''​/​var/​log/​apache2''​.
  
 Pour afficher les dernières 40 lignes du journal d'​erreur par défaut : Pour afficher les dernières 40 lignes du journal d'​erreur par défaut :
 <​code>​sudo tail /​var/​log/​apache2/​error.log -n 40</​code></​note>​ <​code>​sudo tail /​var/​log/​apache2/​error.log -n 40</​code></​note>​
 +
 +<note tip>Si vous rencontrez un problème avec PHP, consultez également les [[:​php#​problemes_courants|problèmes courants spécifiques à PHP]].</​note>​
  
 ==== Page blanche ==== ==== Page blanche ====
Ligne 449: Ligne 474:
  
   * 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 464: Ligne 489:
  
 Consultez le log d'​erreur de votre hôte virtuel pour en savoir plus. Consultez le log d'​erreur de votre hôte virtuel pour en savoir plus.
 +
 +==== 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.\\
 +  * En premier lieu 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.
  
 ==== 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 **//​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 473: Ligne 504:
         Options FollowSymLinks MultiViews         Options FollowSymLinks MultiViews
 </​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''​. 
 ===== Liens utiles ===== ===== Liens utiles =====
  
  • apache2.txt
  • Dernière modification: Le 12/10/2023, 11:28
  • par krodelabestiole