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 14/07/2018, 12:21]
krodelabestiole déplacement erreur 503 depuis la page PHP
apache2 [Le 13/01/2019, 17:44]
krodelabestiole [mod_proxy] + proxy_http proxy_wstunnel
Ligne 27: Ligne 27:
 ===== 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 72: 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 119: 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 ====
Ligne 126: Ligne 128:
  
 <note important>​ <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]]).\\ ​ 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. De plus ces fichiers existant par défaut peuvent éventuellement être écrasés lors de mises à jour majeures du système.
 </​note>​ </​note>​
  
-Le premier //​VirtualHost//​ 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 140: 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é (dans le cas ou le serveur possède plusieurs adresses IP), 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''​. |
Ligne 149: Ligne 152:
 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 :
Ligne 176: Ligne 183:
  
 ^ 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. |
 | <​file>​DocumentRoot "/​var/​www/​example"</​file>​ | On placera les fichiers du site dans le répertoire ''/​var/​www/​example''​. | | <​file>​DocumentRoot "/​var/​www/​example"</​file>​ | On placera les fichiers du site dans le répertoire ''/​var/​www/​example''​. |
 | <​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><​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 liens symboliques qu'il trouvera dans ce répertoire (et ses descendants). |+| <​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. 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>​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''​. |
Ligne 187: Ligne 194:
 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. |
  
-<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.\\  +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 : 
-Il suffit de résoudre l'IP du serveur pour un domaine fictif ​dans le fichier ''/​etc/​hosts'' ​du côté client :+<​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. 
 + 
 +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 depuis ce client à 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 en phase de développement sur une machine ou un réseau local, par exemple.</​note>​
Ligne 289: 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 324: 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 426: Ligne 442:
 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 478: Ligne 493:
  
 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 ​le serveur HTTP+  * 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 ​essayer ​de le vider et de le désactiver. Puis essayer ​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.
  
 ==== Fichiers introuvables dans /javascript ==== ==== Fichiers introuvables dans /javascript ====
  • apache2.txt
  • Dernière modification: Le 12/10/2023, 11:28
  • par krodelabestiole