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 02/11/2018, 00:39]
krodelabestiole [Permissions] syntaxe plus simple (je crois)
apache2 [Le 07/10/2021, 18:36]
Amiralgaby chemin logo changé + tag Focal
Ligne 1: Ligne 1:
-{{tag>​réseau serveur internet Xenial Bionic}} +{{tag>​réseau serveur internet Xenial Bionic ​Focal}} 
- +{{ :​logo:​apache-logo.png?​80nolink| Logo du logiciel Apache 2}}
----- +
-{{ 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 serveur ​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 internet ​du [[https://​fr.wikipedia.org/​wiki/​World_Wide_Web|WWW]].\\+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]].\\
 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 17: Ligne 15:
 ===== Installation ===== ===== Installation =====
  
-Pour installer Apache seul, [[:​tutoriel:​comment_installer_un_paquet|installez simplement le paquet]] **[[apt>apache2|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]].
Ligne 27: Ligne 25:
 ===== Lancement ===== ===== Lancement =====
  
-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.+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.
  
 ==== Empêcher Apache de démarrer automatiquement ​ ==== ==== Empêcher Apache de démarrer automatiquement ​ ====
Ligne 72: Ligne 70:
   * 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.
   * 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 80: Ligne 78:
  
 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 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 183: Ligne 181:
  
 ^ directive ^ description ^ ^ directive ^ description ^
-| <​file><​VirtualHost *:​80></​file>​ | On accepte les connections ​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 199: Ligne 197:
 <​code>​sudo systemctl reload apache2</​code>​ <​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 définir un hôte virtuel sans avoir de nom de domaine enregistré chez un registrar
 + 
 +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 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 : 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 :
Ligne 208: Ligne 209:
 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''​ 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 en phase de développement sur une machine ou un réseau local, par exemple. 
 +</​note>​
  
 ===== HTTPS ===== ===== HTTPS =====
Ligne 216: Ligne 218:
 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 ni nécessaire,​ ni faisable 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/​|Cerbot]]** 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]].
 <​note>​Vous trouverez une documentation plus détaillée à ce sujet sur [[:​tutoriel:​securiser_apache2_avec_ssl|cette page de la documentation]],​ mais nous verrons ici une méthode spécifique à Apache.</​note>​ <​note>​Vous trouverez une documentation plus détaillée à ce sujet sur [[:​tutoriel:​securiser_apache2_avec_ssl|cette page de la documentation]],​ mais nous verrons ici une méthode spécifique à Apache.</​note>​
  
Ligne 236: Ligne 238:
 === Installation de Certbot === === Installation de Certbot ===
  
-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]] ​+Pour installer Certbot : 
-<​code>​sudo apt install ​python-certbot-apache</​code>​+<​code>​sudo apt install ​python3-certbot-apache</​code>​
  
 === Utilisation de Certbot === === Utilisation de Certbot ===
Ligne 252: Ligne 254:
 === 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''​. Il est également créé un « //timer// » systemd qui fait la même chose (/​lib/​systemd/​system/​certbot.timer et certbot.service).
  
 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.
Ligne 305: Ligne 307:
 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 319: Ligne 321:
  
 <​file>​RewriteEngine on <​file>​RewriteEngine on
 +
 +RewriteRule ^page-([0-9]+)$ /​page.php?​id=$1 [L]
  
 # Lorsque l'on tape dans la barre d'​adresse www.example.com/​page-* c'est la page www.example.com/​page.php?​id=* qui s'​affiche # Lorsque l'on tape dans la barre d'​adresse www.example.com/​page-* c'est la page www.example.com/​page.php?​id=* qui s'​affiche
 # ^ et $ dans le bloc modèle signifient respectivement le début et la fin d'une ligne. # ^ et $ dans le bloc modèle signifient respectivement le début et la fin d'une ligne.
 # $1 est une variable qui récupère la valeur entre les premières parenthèses du bloc modèle # $1 est une variable qui récupère la valeur entre les premières parenthèses du bloc modèle
-# [L]=[last] signifie que si cette règle s'​applique on n'en cherche pas d'​autre +# [L]=[last] signifie que si cette règle s'​applique on n'en cherche pas d'​autre</​file>​
-RewriteRule ^page-([0-9]+)$ /​page.php?​id=$1 [L]</​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 :
 +<​code>​
 +    <​Directory /​var/​www/​html>​
 +            AllowOverride All
 +    </​Directory>​
 +</​code>​
 +</​note>​
 ==== mod_proxy==== ==== mod_proxy====
  
Ligne 340: Ligne 350:
  
 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 438: Ligne 448:
 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]] ''​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 -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)
  
Ligne 512: Ligne 522:
    * [[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]]
 +   * [[:​tutoriel:​lamp_repertoires_de_travail|Serveur LAMP - Créer un/des répertoires de travail]]
    * [[:​docker_lamp|installer un serveur LAMP avec Docker]]    * [[:​docker_lamp|installer un serveur LAMP avec Docker]]
    * [[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]]
  • apache2.txt
  • Dernière modification: Le 12/10/2023, 11:28
  • par krodelabestiole