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 16/01/2018, 07:58]
82.251.241.242 [/etc/apache2]
apache2 [Le 17/04/2024, 12:19] (Version actuelle)
krodelabestiole [.htaccess] liste allowoverride
Ligne 1: Ligne 1:
-{{tag>​réseau serveur }}+{{tag>​réseau serveur ​internet 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 ======
  
-**Apache** ​ //de son vrai nom HTTPD// ​est le plus populaire des serveurs HTTP. Il est produit par la « Apache Software Foundation ​». C'est un logiciel libre fourni sous la [[wpfr>​Licence_Apache|licence spécifique Apache]], [[http://​www.apache.org/​licenses/​|licence (en)]].+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]].
  
-Cette page présente un cas concret de configuration ​d'un serveur HTTP Apache. À vous de l'adapter ​à vos besoins.\\ +On utilise généralement Apache en conjonction avec d'autres logiciels, permettant d'interpréter du code et d'​accéder ​à des bases de donnéesLe cas le plus courant ​est celui d'un serveur ​[[:LAMP]] (Linux ​Apache ​MySQL PHP).
-Elle est une fusion : +
-    * du [[:​projets:​ecole:​apache|cours sur apache]] du canal IRC [[:​projets:​ecole|#​ubuntu-fr-classroom]] ; +
-    * de diverses autres recherches sur le site de la [[http://​httpd.apache.org/​docs/​|documentation ​d'Apache]] \\ +
-Des liens vers [[tutoriel:securiser_apache2_avec_ssl|sécuriser Apache avec SSL]], [[tutoriel:​virtualhosts_avec_apache2|virtualhosts avec Apache]] et d'​autres documentations seront donnés au moment opportun.\\+
  
-<note important>​La version ​de Apache installée à l'heure actuelle, est la version 2.4.27. +<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]].
-Ce changement de version implique ​des changements de certaines directives présentes dans vos VHOSTS par rapport aux autres versions. +
-Référez-vous à la page : [[http://​httpd.apache.org/​docs/​2.4/​upgrading.html|suivante]] qui décrit, en détails, les changements entre la version 2.2 et la version 2.4. +
-</​note>​ +
-===== Pré-requis =====+
  
-  * Quelques connaissances de base des protocoles HTTP, DNS (ou /etc/hosts configuré) et TCP/IP (adressage, sous-réseaux,​ etc.) ; +Les références à prendre ​en compte pour comprendre la configuration d'​Apachesont [[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>​
-  * Un réseau local en état de marche (IP attribuéesconnexion à internet) ; +
-  * Un serveur ​    [[:bind9|DNS]] configuré (pour le domaine).+
  
-===== Introduction : HTTP ====== +===== Installation ​=====
-==== Qu'​est-ce que le Web ? ====+
  
-Le Web est un des nombreux services disponibles sur Internet. Il s'agit de l'​ensemble des documents accessibles par le protocole HTTP (par un navigateur Web). Une caractéristique essentielle du Web est la capacité de passer d'un document à un autre par des liens hypertexte. Un site Web est quant à lui un ensemble de pages Webliées entre elles.+Pour installer Apache seul[[:​tutoriel:​comment_installer_un_paquet|installez simplement le paquet]] **[[apt>​apache2]]**.
  
-Un site Web a une adressecomme celle du site Ubuntu-fr ​http://​ubuntu-fr.org.\\ +Pour installer Apache avec PHP et MySQL ou MariaDBreportez vous à l'[[:lamp#​installation|installation ​de LAMP]].
-La page Web principale ​de ce site propose des liens hypertexte vers d'​autres pages et d'​autres sites, par exemple : http://​ubuntu-fr.org/​telechargement.+
  
-Attention ​à ne pas faire d'amalgame entre Web (service HTTP) et Internet (le réseau mondial). Le salon IRC sur lequel s'est déroulée la [[:projets:​ecole|séance de cours]] utilise Internet, pas le Web. +À la suite de cette installation votre serveur doit fonctionner et être accessible ​à l'adresse ​[[http://localhost]] (à partir de la même machine).
-==== HTTP et navigation ====+
  
-Pour **accéder à un site Web**, il vous faut **utiliser un client Web**, communément appelé ​ **navigateur**, par exemple : firefox, lynx, opera, rekonq, konqueror, w3m… ppo\\ +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.
-Généralement vous passez par un moteur de recherche pour trouver l'adresse d'un site  mais vous pouvez aussi l'entrer directement dans la barre d'adresse.\\+
  
-Vous devez **spécifier** en plus du **nom** ou de l'​**adresse IP**, le **protocole** utilisé.\\ +===== Lancement =====
-L'​adresse de la page se découpe ainsi :  +
-**protocole**<​nowiki>://</​nowiki>​**sd**.**SLD**.**TLD**/​\\ +
-  - protocole **[[wpfr>​Protocole_réseau]]** : http, ftp... \\ +
-  - sd **[[wpfr>​Nom_de_domaine|sous-domaine]]** : www, ftp, doc, httpd...\\ +
-  - SLD(Second Level Domain) ​ **[[wpfr>​Domaine_de_deuxième_niveau]]** : ubuntu-fr, apache...\\ +
-   - TLD(Top Level Domain) ​ **[[wpfr>​Domaine_de_premier_niveau]]** : org, com, fr...\\+
  
-Les TLD sont délivrés par L'**[[wpfr>​|ICANN]]** [[http://www.icann.org/tr/french.html|ICANN fr]] \\ +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.
-Les SLD par les **[[wpfr>​Bureau_d'​enregistrement|registraires]]** qui sont autorisés à les déléguer\\ +
-Les sous-domaines par le propriétaire du domaine puisque le registraire lui a assigné la gestion de ce domaine.\\+
  
-Le protocole qui nous intéresse ici est HTTP((L'​acronyme **[[wpfr>​Hypertext_Transfer_Protocol|HTTP]]** signifie //HyperText Transfert Protocol// ; //​Protocole ​de Transfert HyperTexte//​.)) qui est l'​acronyme anglais de **Protocole de Transfert HyperTexte**.\\+==== Empêcher Apache ​de démarrer automatiquement ​ ====
  
-Un document **[[wpfr>Hypertexte|hypertexte]]** est un document contenant des **[[wpfr>Hyperlien|hyperliens]]**.\\ +Pour empêcher cela : 
-Ceux-ci permettent de lier les pages les unes avec les autres. Ainsi, vous pouvez naviguer grâce à des liens sur les pages.\\ +<code>sudo systemctl disable apache2</​code
-Cet ordinateur, auquel vous vous connectez pour lire cette documentation,​ héberge à cette adresse un logiciel qui fournit les pages demandées. Apache est [[http://​news.netcraft.com/​archives/​web_server_survey.html|le plus utilisé]].+==== Réactiver ​le démarrage automatique ====
  
-Il existe une version sécurisée du HTTP : le HTTPS((L'​acronyme **[[wpfr>​Hypertext_Transfer_Protocol#​HTTPS|HTTPS]]** signifie //HyperText Transfert Protocol Secured// ; //​Protocole ​de Transfert Hypertexte Sécurisé//​.)).\\ +Pour de nouveau relancer Apache automatiquement au démarrage ​de la machinec'est simple : 
-Afin de **différencier quel protocole** on utiliseon leur **réserve un port**((**[[wpfr>​Port_%28logiciel%29|Port]]** Découpe logique de l'interface physique il en existe 65536)), par défaut le **80 pour le mode non sécurisé** et le **443 pour le mode sécurisé**.\\ +<​code>​sudo systemctl enable apache2</​code>​
-Il faut toutefois noter que les conventions ci-dessus peuvent ne pas être respectées si le client et le serveur sont cohérents entre eux et que le nouveau numéro choisi n'est pas, par ailleurs, déjà utilisé.\\+
  
-==== Mode de fonctionnement sommaire ​====+==== Autres commandes utiles ​====
  
-Au moment de son démarrage, Apache charge les  [[apache2#configuration|fichiers de configuration]] ​de la machine locale ​et se met en attente de requêtes sur les interfaces réseaux.+  * Pour arrêter apache2 : ''​sudo systemctl stop apache2''​ 
 +  * Pour lancer ​apache2 ​: ''​sudo systemctl start apache2''​ 
 +  * Pour relancer apache2 : ''​sudo systemctl restart apache2''​ 
 +  * Pour recharger la configuration ​d'​apache2 : ''​sudo systemctl reload apache2''​ 
 +  * 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 lister les hôtes virtuels chargés : ''​a2query -s''​ 
 +  * 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 voir les modules d'​Apache chargés : ''​sudo apache2ctl -M''​ ou ''​a2query -m''​
  
-Lorsque vous utilisez votre navigateur Web (un client HTTP), que vous cliquiez sur un lien ou que vous rentriez directement l'​adresse dans la barre d'​adresse,​ +===== Mode de fonctionnement sommaire =====
-vous effectuez une requête :  +
-  * Le client détermine et se connecte au serveur ([[:​bind9#​introduction|voir documentation DNS]]) ; +
-  * Le client effectue une requête HTTP sur le serveur, par la méthode GET du protocole HTTP : il lui demande une page ; +
-  * Après l'​analyse ​de la requête, le serveur renvoie la page concernée sous forme de code dont on peut spécifier le format de données (pour ceux qui connaissent les balises <​meta>​ de l'​en-tête des documents servis, le fameux "​content-type"​ des pages html) ; +
-  * Une fois toutes les données envoyées, le serveur ferme la connexion ; +
-  * Parallèlement,​ le client analyse et construit l'​affichage à partir du code reçu.+
  
-Voilàcomment fonctionnent le protocole HTTP et APACHE2 (sans entrer dans les détails :-D).+Lorsqu'​il démarreApache 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 anglaiscertains ports.
  
-<note tip>Voir la [[projets:​ecole:​apache|page de cours sur Apache ​de #​u-classroom]]+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 : 
 +  * Le navigateur résout le nom de domaine (il obtient l'​adresse IP du serveur). 
 +  * 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 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.).
  
-[[wpfr>​Hypertext_Transfer_Protocol|Plus d'​informations concernant le protocole HTTP…]]+Voilà comment fonctionne (grossièrement ;-) ) un serveur web.
  
-[[wpfr>​Apache_HTTP_Server|Plus d'​informations concernant Apache HTTP Server…]] +===== Fichiers de configuration =====
-</​note>​ +
-Pour installer un serveur HTTP, nous allons utiliser une application bien connue des administrateurs réseaux : Apache2.+
  
-===== Installation =====+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 morcelée. Toutefois, tous les fichiers de configuration se situent dans le répertoire ''/​etc/​apache2''​ :
  
-Apache est composé ​de plusieurs paquets... +  * ''​sites-available''​ contient les fichiers ​de configuration des **sites** disponibles 
-====Installation de base====+  * ''​sites-enabled''​ contient des [[:​lien_physique_et_symbolique|liens symboliques]] vers les configurations,​ dans ''​site-available'',​ des sites activés ​
  
-[[:​tutoriel:​comment_installer_un_paquet|Installez le paquet]] ​**[[apt>​apache2|apache2]]**.+  ​''​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
  
-À la suite de cette installation votre serveur doit fonctionner et être accessible à l'adresse suivante ​[[http://localhost]] (à partir de la même machine).+  * ''​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
  
-Un beau message va s'afficher dans votre navigateur ​ **It Works**c'est le contenu du fichier **/​var/​www/​html/​index.html** (configuration par défaut)+<note important>​Normalement les fichiers de configuration globale ''​apache2.conf'​', ''​envars''​ et ''​ports.conf''​ n'ont pas à être modifiés.
  
-<note important>​ +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.
-**À partir ​d'Ubuntu 14.04** \\ +
-Le répertoire par défaut n'est plus //"/​var/​www"//​ mais //"/​var/​www/​html"//​. Si vous n'avez pas touché aux fichiers ​de config par défaut de apache ​et que vos sites en localhost ne sont plus accessibles,​ vous pouvez les déplacer ​dans ce dossier //"/​var/​www/​html"//​ ou changer le chemin du //"​DocumentRoot"//​ dans le fichier //"/​etc/​apache2/​sites-available/​000-default.conf"//</​note>​ +
-\\+
  
 +Toute la configuration devrait se faire dans les sous dossiers ''​xxx-available''​.</​note>​
  
-====La bibliothèque,​ le serveur et ses outils====+Les diverses configurations sont activées (''​a2en''​ pour //Apache 2 enable//) ou désactivées (''​a2dis''​ pour //Apache 2 disable//) avec les commandes suivantes :
  
-^ Nom ^ Rôle ^ +<​code>​sudo a2ensite ​[configuration d'un site à activer
-| **[[apt>​libapr1|libapr1]]** | Apache's Portable Runtime Library, bibliothèque de fonctions standards portables. | +sudo a2dissite ​[configuration d'un site à désactiver]
-| **[[apt>​apache2|apache2]]** | Ce paquet contient le serveur. | +
-| **[[apt>​apache2.2-common|apache2.2-common]]** |Ce paquet contient les modules standards apache2, qui incluent le support SSL. | +
-| **[[apt>​apache2-utils|apache2-utils]]** | Outils pour serveurs web. |+
  
-<note tip>​Pour ​[[Dapper]], remplacez par **[[apt>​libapr0|libapr0]]** et **[[apt>​apache2-common|apache2-common]]**.</​note>​+sudo a2enconf ​[configuration d'un service à activer] 
 +sudo a2disconf ​[configuration d'un service à désactiver]
  
-==== Le MPM ====+sudo a2enmod [configuration d'un module à activer] 
 +sudo a2dismod [configuration d'un module à désactiver]</​code>​
  
-Le MPM((//​Multi-Processing Module//, module multi traitements)),​ indispensable,​ est le moteur du serveur, la manière dont il intercepte ​les requêtes. Il en existe plusieurs à vous de choisir en fonction de vos besoins mais le ''​mod-php5'' ​ne supporte que le //prefork// : FIXME et  itk ?+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 : 
 +<​code>​sudo systemctl reload apache2</code>
  
-^ Nom ^ Commentaire ^ +<note>Par défaut ​Apache ​ne prend en compte que les fichiers portant l'​extension ''.conf''​ (ou ''.load'', seulement pour les modules).</​note>​
-| **[[apt>apache2-mpm-prefork|apache2-mpm-prefork]]** | Modèle traditionnel pour Apache2 version sans thread, ​                       intercepte les requêtes à la manière ​Apache ​1.3, utile pour éviter la mise en thread pour la compatibilité avec les bibliothèques non-thread-safe. C'est le meilleur mpm pour isoler les requêtes+
-| **[[apt>​apache2-mpm-worker|apache2-mpm-worker]]** | Modèle à processus haute vitesse pour Apache2 version avec thread, il est considérablement plus rapide que la version traditionnelle et **c'est le MPM recommandé**+
-| **[[apt>​apache2-mpm-itk|apache2-mpm-itk]]** | Permet d'exécuter ​les scripts php avec les droits d'un utilisateur donné dans un virtualhost|+
  
-<note important>​A partir de Trusty 14.04, ces paquets pour le choix du MPM sont devenus obsolètes. Cependant, ils continuent ​d'exister pendant une phase de transition. Leur unique fonction est d'​installer le paquet //apache2// par le mécanisme des dépendances.</​note>​+==== Configuration des ports d'écoute ====
  
 +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é.
  
-===== Configuration =====+Sauf cas très particulier,​ il n'est pas nécessaire de toucher à cette configuration.
  
-<note note>​Remise en question de la part d'un adminsys : cette section donne un ensemble de fichiers de configuration,​ en indiquant qu'il faudrait remplacer les fichiers par défaut. Pourquoi ? Les fichiers par défaut sont tout à fait corrects et je ne vois pas l'​intérêt de les remplacer. ​ --tiramiseb</​note>​+===== Hôtes virtuels =====
  
- Tous les **fichiers de configuration** de Apache2 sont dans le dossier ​**/etc/apache2**.\\+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).
  
-==== /​etc/​apache2 ==== +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/''​.
-Rendez-vous ​dans le répertoire /​etc/​apache2/​, et regardez les fichiers le composant : +
-  apache2.conf ​ ports.conf ​  ​envvars ​  ​mods-available ​ mods-enabled ​ conf-available conf-enabled ​sites-available ​ ​sites-enabled+
  
-La plupart de ces fichiers sont plus ou moins spécifiques à Debian/​Ubuntu et nous permettent de séparer la configuration en plusieurs parties.+==== Par défaut ====
  
-  * **''​envvars''​** est utilisé pour définir des variables d'​environnement propres à Apache ; +Par défautil existe 2 hôtes virtuels.
-  * **''​ports.conf''​** contient la directive //listen// qui spécifie les adresses et les ports d'​écoute ; +
-  * **''​apache2.conf''​** est le fichier principal de configuration c'est à partir de lui que tous les autres fichiers sont chargés ; +
-  * **''​conf-available"​** contient un ensemble d'​éléments de configuration globale (charsetsecurity, etc.) ; +
-  * **''​conf-enabled"​** contient les éléments ​ de configuration globale activés ; +
-  * **''​mods-available''​** contient la liste des modules d'​apache installés ; +
-  * **''​mods-enabled''​** celle des modules activées ; +
-  * **''​sites-available''​** contient la liste des hôtes virtuels installés ; +
-  * **''​sites-enabled''​** celle des hôtes virtuels ​activées+
  
-Normalement les fichiers de configuration globale apche2.conf,​ envars et ports.conf n'ont pas à être modifiés. Toute la configuration devrait se faire dans les sous dossiers xxx-available. 
- 
-Les dossiers xxx-available contiennent les éléments de configuration **disponibles**. Les dossiers xxx-enabled contiennent les éléments de configurations **activés** sous forme de liens symboliques pointant vers les fichiers correspondant dans le dossier xxx-available. 
- 
-Il est fortement déconseillé d'​intervenir dans les dossiers xx-enabled. Les fichiers doivent être crées ou modifiés dans les dossiers xxx-available et les configurations activées ou désactivées comme suit : 
- 
-<​code>​sudo a2enconf charset.conf</​code>​ 
-<​code>​sudo a2disconf charset.conf</​code>​ 
-pour activer ou désactiver un élément de configuration globale. 
-<​code>​sudo a2enmod rewrite</​code>​ 
-<​code>​sudo a2dismod rewrite</​code>​ 
-pour activer ou désactiver un module Apache. 
-<​code>​sudo a2enconf monhote.conf</​code>​ 
-<​code>​sudo a2disconf monhote.conf</​code>​ 
-pour activer ou désactiver un hôte virtuel. 
- 
-==== Configuration des interfaces ==== 
- 
-La spécification des **interfaces** sur lesquelles **Apache2 écoutera** les requêtes se fait dans **ports.conf** avec la directive **Listen**.\\ 
-Vous devez spécifier au moins le port. Apache écoutera alors sur toutes les interfaces.\\ 
- 
-**Pour restreindre** l'​utilisation à une ou plusieurs interfaces il suffit de les spécifier, suivies du port. Il faut une directive Listen par interface.\\ 
- - Si le serveur est **connecté avec une IP Internet** et que l'on souhaite écouter sur cette interface on ajoute la directive **Listen IP.Internet** .\\ 
- - Si le serveur est **connecté avec une IP locale** et que l'on souhaite écouter sur cette interface on ajoute la directive **Listen IP.Locale** .\\ 
- - Si l'on souhaite **écouter sur un certain port** on rajoute **:​Le_Port** . Il est aussi possible de ne spécifier que le port **Listen Le_Port**.\\ 
- 
-[[:​tutoriel:​comment_editer_un_fichier|Éditez le fichier]] **/​etc/​apache2/​ports.conf**.(remplacer les X.X.X.X par l'ip de l '​interface d'​écoute )\\ 
- 
-<​file>​ 
- #​interface (local ou internet) connectée sur port standard 
- ​Listen X.X.X.X:80 
- 
- # toutes les interfaces connectées sur port ssl 
- ​Listen 443 
-</​file>​ 
 <note important>​ <note important>​
-Il faut que les interfaces aient été démarrées avant Apache</​note>​+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>​
  
-==== Fichier de configuration ====+Le premier //​VirtualHost//​ est défini dans le fichier ''/​etc/​apache2/​sites-available/​000-default.conf''​. Voici son contenu sans les commentaires :
  
-[[:​tutoriel:​comment_editer_un_fichier|Éditez le fichier]] **/etc/apache2/apache2.conf** afin qu'il ressemble a ceci.\\+<file - 000-default.conf><​VirtualHost ​*:80> 
 + ServerAdmin webmaster@localhost 
 + DocumentRoot ​/var/www/html 
 + ErrorLog ${APACHE_LOG_DIR}/​error.log 
 + CustomLog ${APACHE_LOG_DIR}/​access.log combined 
 +</​VirtualHost></​file>​
  
-Les explications des différentes lignes sont données ​dans le fichier de configuration.\\+^ directive ^ description ^ 
 +| <​file><​VirtualHost *:​80></​file>​ | On déclare l'​hôte virtuel. Il doit répondre aux requêtes qui s'​adressent à toutes les adresses IP (''​*''​) du serveur sur le port 80. On peut ici éventuellement spécifier une adresse IP unique à laquelle répondra Apache pour un hôte virtuel donné (dans le cas ou le serveur possède plusieurs adresses IP), ou choisir de répondre au port 443 (pour [[#HTTPS]]) ou à un port exotique (à condition de [[#​configuration_des_ports_d_ecoute|l'​écouter]]). | 
 +| <​file>​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>​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. | 
 +| <​file></​VirtualHost></​file>​ | Fin de la section concernant cet hôte virtuel|
  
-Les directives ​**<​IfModule !nom.c>** testent la présence du module afin de s'adapter aux configurations.\\ +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 SSLLa racine ​de l'​hôte (directive ''​DocumentRoot''​) correspond également à ''/​var/​www/​html'​'.
-Les autres lignes commençant par **#** sont des commentaires\\+
  
 +<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>​
  
-<code apache>​ +==== Création d'​hôtes virtuels ====
-# Répertoire Racine du serveur +
-ServerRoot "/​etc/​apache2"​+
  
-# Fichier de vérrouillage (lock) du serveur  +<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]].
-# IL DOIT SE TROUVER SUR LE DISQUE LOCAL +
-#<IfModule !mpm_winnt.c> +
-#<​IfModule !mpm_netware.c> +
-LockFile ​/var/lock/apache2/accept.lock +
-#</IfModule>​ +
-#</IfModule>​+
  
-# Fichier du PID: endroit où, à son démarrage, apache doit stocker +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>​
-# son numéro ​d'identification ​de processus +
-PidFile /​var/​run/​apache2.pid+
  
-# Delai d'​attente dépassé : nombre ​de secondes avant de recevoir et d'​envoyer +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/'​'.
-un message ​de "​Délai d'attente dépassé"​ (timeout) +
-Timeout 300+
  
-# Connexion persistante:​ Alloue ou non les requêtes persistantes +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.
-# (plus d'​une ​requête par connexion ​)+
-# Mettre à "​Off" ​pour désactiver. +
-KeepAlive On+
  
-# Nombre Maximum ​de requêtes allouées durant une connexion persistante. +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''​.
-# 0 = non limité +
-# Il est recommandé ​de garder ce nombre assez haut pour des performances maximales +
-MaxKeepAliveRequests 100+
  
-# Nombre ​de secondes d'​attente ​pour la prochaine requête +Voici un exemple ​de contenu ​pour ce fichier :
-# d'un même client sur une même connexion avant un timeout +
-KeepAliveTimeout 15+
  
-# Configuration du mpm chargé +<file - example.com.conf><VirtualHost *:80
-<IfModule mpm_prefork_module>​ + ServerName example.com 
-# Nombre de processus serveurs fils à créer au démarrage. + ServerAlias ​www.example.com 
-   ​StartServers ​         5 + DocumentRoot ​"/var/www/example
-# Nombre minimum de processus en attente d'​intercepter des requêtes + <​Directory "/var/www/example">​ 
-   ​MinSpareServers ​      5 + Options ​+FollowSymLinks 
-# Nombre maximum de processus en attente + AllowOverride all 
-   ​MaxSpareServers ​     15 + Require ​all granted
-# Nombre maximum processus fils créés +
-# pour intercepter les requêtes simultanément +
-   ​MaxClients ​         150 +
-# Limite le nombre de requête qu'un processus fils intercepte  +
-# durant son temps de vieSi 0 alors le processus n'​expirera jamais. +
-    MaxRequestsPerChild ​  0 +
-</​IfModule> +
- +
-<IfModule mpm_worker_module>​ +
-    StartServers ​         2 +
-    MaxClients ​         150 +
-# Nombre minimum de processus en attente d'​intercepter les piques de requêtes +
-    MinSpareThreads ​     25 +
-# Nombre maximum de processus en attente +
-    MaxSpareThreads ​     75  +
-    ThreadsPerChild ​     25 +
-    MaxRequestsPerChild ​  0 +
-</​IfModule>​ +
- +
-# Utilisateur et Group sous lesquels les processus du serveur seront lancés +
-User www-data +
-Group www-data +
- +
-# Fichier de restriction des accès  +
-# non conseillé, préferer les directives internes au fichier de configuration +
-# voir [[http://​httpd.apache.org/​docs/​2.2/​howto/​htaccess.html]] +
-AccessFileName .htaccess +
- +
-# Les lignes suivantes empêchent les fichiers .htaccess et .htpasswd d'​être vus  +
-# par les clients Web (i.e. les navigateurs) . +
-<Files ~ "​^\.ht"​+
-    Order allow,​deny +
-    Deny from all +
-    Satisfy All +
-</​Files>​ +
- +
-# Restriction de la racine du serveur +
-<​Directory /> +
-  Order Deny,​Allow +
-  Deny from all +
-  Options None +
-  AllowOverride None +
-</​Directory>​ +
- +
-# Fichier contenant la liste des conversions des extensions de fichiers vers le type de contenu+
-# par défaut ce fichier est relié au contenu enregistré à l'​IANA. http://www.iana.org/​assignments/​media-types/​index.html+
-TypesConfig /​etc/​mime.types +
- +
-# définit le type par défaut des fichiers dont le type ne peut être déterminé +
-# par le serveur. +
-# Il convient de le mettre à "none" afin de ne pas fournir d'​informations erronées. +
-DefaultType none +
- +
-# Active la résolution DNS pour les noms d'​hôtes +
-HostnameLookups Off +
- +
-# chemin du fichier de log des erreurs du serveur. +
-ErrorLog ​/var/log/​apache2/​error.log +
- +
-# niveau de log du serveur  +
-# emerg  Messages Urgents - Le système est inutilisable. +
-# alert Messages d'​actions qui doivent être effectuées immédiatement. +
-# crit         Messages critiques. +
-# error Messages d'​erreurs. +
-# warn         Messages d'​avertissement. +
-# notice Messages normales mais significatives. +
-# info         Messages d'​informations. +
-# debug Messages de débogage +
-LogLevel warn +
- +
-# format des lignes contenues dans les logs +
-# %a         Adresse ip distante. +
-# %A         Adresse ip local. +
-# %B         Taille de la réponse en octets, excluant l'​entête HTTP. +
-# %b         Taille de la réponse en octets, excluant l'​entête HTTP au format CLF. +
-# %{Foobar}C Contenu du cookie "​Foobar"​ de la requête envoyée au serveur. +
-# %D         Le temps mis à servir la requête . +
-# %{FOOBAR}e Contenue de la variable d'​environnement "​FOOBAR"​. +
-# %f         Nom du fichier. +
-# %h         Hôte distant. +
-# %H         Le protocole demandé. +
-# %{Foobar}i Le contenu de "​Foobar":​ Ligne(s) d'​en-tête de la requête envoyée au serveur. +
-# %l         nom du fichier de log distant (de identd, si il est fournit). +
-# cela retournera un tiret tant que //​mod_ident//​ n'est pas présent  +
-# et //​IdentityCheck//​ n'est pas mis à ON. +
-# %m         Méthode de la requête. +
-# %{Foobar}n Contenu de la note "​Foobar"​ provenant d'un autre module. +
-# %{Foobar}o Le contenu de "​Foobar":​ Ligne(s) d'​entête dans la réponse. +
-# %p         Port canonique du serveur qui sert la réponse. +
-# %P         Id du processus fils qui a servi la requête. +
-# %{format}P Id du processus ou du thread fils qui a servi la requête. +
-# Les formats valides sont pid, tid, et hextid. +
-# hextid nécessite APR 1.2.0 ou supérieur. +
-# %q         Chaînes de la requête (Commençant avec un ? si une chaine de requête existe, sinon une chaîne vide) +
-# %r         Première ligne de la requête. +
-# %s         Statut. Pour les requête redirigées en interne, ceci est la requête originale --- %>s pour la dernière. +
-# %t         Heure à laquelle la requête a été reçue (format standard anglais mois jour année ) +
-# %{format}t L'​heure,​ au format précisé, qui doit être dans les formats de strftime(3). (potentiellement localisé). +
-# %T         Le temps mis pour répondre à la requête. +
-# %u         Utilisateur distant (de l'​authentification;​ peut être faux si le  code de retour de statut (%s) est 401) +
-# %U         Url demandée, n'​inclue aucune chaîne de requête. +
-# %v         Nom canonique de ServerName du serveur qui répond à la requête. +
-# %V         Nom du serveur en fonction du paramètre UseCanonicalName. +
-# %X         Statut de la connexion une fois la réponse envoyée. +
-#               X = connexion annulée avant la réponse complète. +
-#               + = la connexion peut être maintenue après l'​envoi de la réponse. +
-#               - = la connexion sera fermée après l'​envoi de la réponse. +
-# %I         Octets reçus, incluant l'​entête et la requête, ne peut être nul. Vous devez activer //​mod_logio//​ pour l'​utiliser. +
-# %O         Octets envoyés, incluant l'​entête,​ ne peut être nul. Vous devez activer //​mod_logio//​ pour l'​utiliser. +
- +
-LogFormat "%h %l %u %t \"​%r\"​ %>s %b \"​%{Referer}i\"​ \"​%{User-Agent}i\""​ combined +
-LogFormat "%h %l %u %t \"​%r\"​ %>s %b" common +
-LogFormat "​%{Referer}i -> %U" referer +
-LogFormat "​%{User-agent}i"​ agent +
- +
-# entête envoyée au client à propos du serveur +
-# Prod                    Server: Apache +
-# Major                   ​Server:​ Apache/2 +
-# Minor                   ​Server:​ Apache/​2.0 +
-# Min                     ​Server:​ Apache/​2.0.41 +
-# OS                      Server: Apache/​2.0.41 (Unix) +
-# Full (ou non spécifié) ​ Server: Apache/​2.0.41 (Unix) PHP/4.2.2 MyMod/1.2  +
-ServerTokens Prod +
- +
-# Pied de page renvoyé par le serveur  +
-# utile afin de déterminer quelle est le serveur  +
-# qui dans une chaîne (proxy) qui génère une erreur +
-ServerSignature Off +
- +
-# Inclusion des fichiers, contenus dans le dossier des mods, qui sont activés +
-Include /​etc/​apache2/​mods-enabled/​*.load +
-Include /​etc/​apache2/​mods-enabled/​*.conf +
- +
-# Inclusion de l'​ancien fichier de configuration de apache +
-# à des fins de compatibilités ascendantes. +
-Include /​etc/​apache2/​httpd.conf +
- +
-# Inclusion du fichier de configuration des adresses et ports +
-# sur lesquels le serveur sera à l'​écoute +
-Include /​etc/​apache2/​ports.conf +
- +
-# Inclusion d'​autres fichiers de configuration +
-Include /​etc/​apache2/​conf.d/​ +
- +
-# inclusion des configurations des sites actifs +
-Include /​etc/​apache2/​sites-enabled/​ +
- +
-# Directive des alias +
-<​IfModule alias_module>​ +
-# alias des icones d'​apache +
-# nom de l'​alias , répertoire vers lequel pointe l'​alias +
-    Alias /icons "/​usr/​share/​apache2/​icons/" +
-    <​Directory "/usr/share/apache2/​icons">​ +
-        Options ​None +
-        AllowOverride ​None +
-        Order allow,​deny +
-        Allow from all +
-    </​Directory>​ +
- +
-# alias pour awstats  +
-    Alias /​awstats-icon "/​usr/​share/​awstats/​icon"​ +
-    ScriptAlias /awstats "/​usr/​lib/​cgi-bin/"​ +
- <​Directory "/​usr/​share/​awstats/​icon">​ +
-   ​  ​    ​Options None +
-#Indexes MultiViews +
- AllowOverride None +
- Order allow,deny +
- Allow from all+
  </​Directory>​  </​Directory>​
-</IfModule>+ ErrorLog /​var/​log/​apache2/​error.example.com.log 
 + CustomLog /​var/​log/​apache2/​access.example.com.log combined 
 +</​VirtualHost>​</file>
  
-# Types images ​d'icône +^ directive ^ description ^ 
-<IfModule mod_autoindex.c>+| <​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>​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><​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>​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 
 +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. |
  
-    IndexOptions FancyIndexing VersionSort HTMLTable NameWidth=*+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>​ 
 +On recharge ensuite la configuration d'​Apache : 
 +<​code>​sudo systemctl reload apache2</​code>​
  
-    AddIconByEncoding (CMP,/​icons/​compressed.gif) x-compress x-gzip+<note tip> 
 +On peut définir un hôte virtuel sans avoir de nom de domaine enregistré chez un registrar. 
 +Cela peut être très pratique en phase de développement sur une machine ou un réseau localpar exemple.
  
-    AddIconByType (TXT,/​icons/​text.gif) text/* +Il existe plusieurs méthodes :\\  
-    ​AddIconByType (IMG,/​icons/​image2.gif) image/* +\\ 
-    AddIconByType (SND,/​icons/​sound2.gif) audio/* +
-    AddIconByType (VID,/​icons/​movie.gif) video/*+
  
-    AddIcon /​icons/​binary.gif .bin .exe +  * 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)\\ ​ 
-    ​AddIcon /​icons/​binhex.gif .hqx +\\ 
-    AddIcon /​icons/​tar.gif .tar +
-    AddIcon /​icons/​world2.gif .wrl .wrl.gz .vrml .vrm .iv +
-    AddIcon /​icons/​compressed.gif .Z .z .tgz .gz .zip +
-    AddIcon /​icons/​a.gif .ps .ai .eps +
-    AddIcon /​icons/​layout.gif .html .shtml .htm .pdf +
-    AddIcon /​icons/​text.gif .txt +
-    AddIcon /​icons/​c.gif .c +
-    AddIcon /​icons/​p.gif .pl .py +
-    AddIcon /​icons/​f.gif .for +
-    AddIcon /​icons/​dvi.gif .dvi +
-    AddIcon /​icons/​uuencoded.gif .uu +
-    AddIcon /​icons/​script.gif .conf .sh .shar .csh .ksh .tcl +
-    AddIcon /​icons/​tex.gif .tex +
-    AddIcon /​icons/​bomb.gif core+
  
-    AddIcon /icons/back.gif .+  * 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é) : 
-    AddIcon ​/icons/​hand.right.gif README +<​code>​ping mon-ordi.local</code> 
-    ​AddIcon /​icons/​folder.gif ^^DIRECTORY^^ +Si on a une réponse c'est que ça fonctionne, on peut utiliser ce nom de domaine sur le réseau local.\\  
-    ​AddIcon /​icons/​blank.gif ^^BLANKICON^^+\\ 
  
-  +  * ou on peut créer un nouveau nom de domaine "​fictif"​. 
-    ​DefaultIcon ​/icons/unknown.gif+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]])
  
-    ReadmeName README.html +Avec la directive ''​ServerName example.lan''​ dans le //​VirtualHost//,​ l'​hôte virtuel sera accessible depuis ce client à l'​adresse [[http://​example.lan/​]].
-    HeaderName HEADER.html+
  
-    IndexIgnore ​.??* *~ *# RCS CVS *,v *, +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]])) 
-</IfModule>+</note>
  
-# Type langages +===== HTTPS =====
-<​IfModule mod_mime.c>​ +
-    AddType application/​x-compress .Z +
-    AddType application/​x-gzip .gz .tgz+
  
-    AddLanguage ca .ca +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.
-    AddLanguage cs .cz .cs +
-    AddLanguage da .dk +
-    AddLanguage ​de .de +
-    AddLanguage el .el +
-    AddLanguage ​en .en +
-    AddLanguage eo .eo +
-    AddLanguage es .es +
-    AddLanguage et .et +
-    AddLanguage fr .fr +
-    AddLanguage he .he +
-    AddLanguage hr .hr +
-    AddLanguage it .it +
-    AddLanguage ja .ja +
-    AddLanguage ko .ko +
-    AddLanguage ltz .ltz +
-    AddLanguage nl .nl +
-    AddLanguage nn .nn +
-    AddLanguage no .no +
-    AddLanguage pl .po +
-    AddLanguage pt .pt +
-    AddLanguage pt-BR .pt-br +
-    AddLanguage ru .ru +
-    AddLanguage sv .sv +
-    AddLanguage zh-CN .zh-cn +
-    AddLanguage zh-TW .zh-tw +
-</​IfModule>​+
  
-# Langue prioritaire pour les pages de réponses (choisir l'ordre des langues des pages) +Il n'est ni nécessaire,​ ni faisable ​de mettre ​en place HTTPS avec un certificat valide sur un serveur de développement local.
-<​IfModule mod_negotiation.c>​ +
-    +
-    LanguagePriority fr ca cs da de el eo es et en he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW+
  
-    ForceLanguagePriority Prefer Fallback+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>​
  
-</​IfModule>​+==== Activation du module SSL ====
  
-# Type d'​encodage de caractères  +Pour que le **protocole TLS** (successeur du **SSL**) puisse fonctionner avec Apache2il faut activer le module //ssl// avec la commande ​
-<​IfModule mod_mime.c>​ +<​code>​sudo a2enmod ssl</​code>​ 
-    AddCharset us-ascii ​   .ascii .us-ascii +puis recharger la configuration d'Apache ​: 
-    AddCharset ISO-8859-1 ​ .iso8859-1 ​ .latin1 +<​code>​sudo systemctl reload apache2</​code>​
-    AddCharset ISO-8859-2 ​ .iso8859-2 ​ .latin2 .cen +
-    AddCharset ISO-8859-3 ​ .iso8859-3 ​ .latin3 +
-    AddCharset ISO-8859-4 ​ .iso8859-4 ​ .latin4 +
-    AddCharset ISO-8859-5 ​ .iso8859-5 ​ .cyr .iso-ru +
-    AddCharset ISO-8859-6 ​ .iso8859-6 ​ .arb .arabic +
-    AddCharset ISO-8859-7 ​ .iso8859-7 ​ .grk .greek +
-    AddCharset ISO-8859-8 ​ .iso8859-8 ​ .heb .hebrew +
-    AddCharset ISO-8859-9 ​ .iso8859-9 ​ .latin5 .trk +
-    AddCharset ISO-8859-10 ​ .iso8859-10 ​ .latin6 +
-    AddCharset ISO-8859-13 ​ .iso8859-13 +
-    AddCharset ISO-8859-14 ​ .iso8859-14 ​ .latin8 +
-    AddCharset ISO-8859-15 ​ .iso8859-15 ​ .latin9 +
-    AddCharset ISO-8859-16 ​ .iso8859-16 ​ .latin10 +
-    AddCharset ISO-2022-JP .iso2022-jp .jis +
-    AddCharset ISO-2022-KR .iso2022-kr .kis +
-    AddCharset ISO-2022-CN .iso2022-cn .cis +
-    AddCharset Big5        .Big5       .big5 .b5 +
-    AddCharset cn-Big5 ​    ​.cn-big5 +
-    # For russian, more than one charset is used (depends on clientmostly)+
-    ​AddCharset WINDOWS-1251 .cp-1251 ​  ​.win-1251 +
-    ​AddCharset CP866       ​.cp866 +
-    AddCharset KOI8      .koi8 +
-    AddCharset KOI8-E ​     .koi8-e +
-    AddCharset KOI8-r ​     .koi8-r .koi8-ru +
-    AddCharset KOI8-U ​     .koi8-u +
-    AddCharset KOI8-ru ​    ​.koi8-uk .ua +
-    AddCharset ISO-10646-UCS-2 .ucs2 +
-    AddCharset ISO-10646-UCS-4 .ucs4 +
-    AddCharset UTF-7       ​.utf7 +
-    AddCharset UTF-8       ​.utf8 +
-    AddCharset UTF-16 ​     .utf16 +
-    AddCharset UTF-16BE ​   .utf16be +
-    AddCharset UTF-16LE ​   .utf16le +
-    AddCharset UTF-32 ​     .utf32 +
-    AddCharset UTF-32BE ​   .utf32be +
-    AddCharset UTF-32LE ​   .utf32le +
-    AddCharset euc-cn ​     .euc-cn +
-    AddCharset euc-gb ​     .euc-gb +
-    AddCharset euc-jp ​     .euc-jp +
-    AddCharset euc-kr ​     .euc-kr +
-    #Not sure how euc-tw got in - IANA doesn't list it??? +
-    AddCharset EUC-TW ​     .euc-tw +
-    AddCharset gb2312 ​     .gb2312 .gb +
-    AddCharset iso-10646-ucs-2 .ucs-2 .iso-10646-ucs-+
-    ​AddCharset iso-10646-ucs-4 .ucs-4 .iso-10646-ucs-4 +
-    AddCharset shift_jis ​  ​.shift_jis .sjis+
  
-    AddHandler type-map var+==== Mise en place de HTTPS avec Certbot ====
  
-    AddType text/html .shtml +Prérequis : 
-    ​AddOutputFilter INCLUDES ​.shtml +  * avoir un ou plusieurs noms de domaine enregistrés,​ pointant sur le serveur depuis plus de 48 heures
-</​IfModule>​+  * avoir un serveur web apache déjà configuré, fonctionnel et accessible publiquement.
  
-<IfModule mod_setenvif.c   +<note>Les instructions pour installer et utiliser simplement certbot sont disponibles en anglais [[https://certbot.eff.org/all-instructions/|sur le site officiel]]En voici un récapitulatif.</note>
-    BrowserMatch "​Mozilla/2" nokeepalive +
-    BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 +
-    BrowserMatch "​RealPlayer 4\.0" force-response-1.0 +
-    BrowserMatch "Java/1\.0" force-response-1.+
-    BrowserMatch "JDK/1\.0" force-response-1.0+
  
-    BrowserMatch "​Microsoft Data Access Internet Publishing Provider"​ redirect-carefully +=== Installation de Certbot ===
-    BrowserMatch "MS FrontPage"​ redirect-carefully +
-    BrowserMatch "​^WebDrive"​ redirect-carefully +
-    BrowserMatch "​^WebDAVFS/​1.[012]"​ redirect-carefully +
-    BrowserMatch "​^gnome-vfs/​1.0"​ redirect-carefully +
-    BrowserMatch "^XML Spy" redirect-carefully +
-    BrowserMatch "​^Dreamweaver-WebDAV-SCM1"​ redirect-carefully +
-</​IfModule>​+
  
-# module d'​information sur le statut du serveur +Pour installer Certbot : 
-<IfModule mod_status.c> +<code>sudo apt install python3-certbot-apache</code>
-    <​Location /server-status>​ +
-        SetHandler server-status +
-        Order deny,​allow +
-        Deny from all +
-        Allow from 127.0.0.1 +
-    </​Location>​ +
-</IfModule>+
  
-# module des informations du serveur +=== Utilisation de Certbot ===
-<​IfModule mod_info.c>​ +
-    <​Location /​server-info>​ +
-        SetHandler server-info +
-        Order deny,​allow +
-        Deny from all +
-        Allow from 127.0.0.1 +
-    </​Location>​ +
-</​IfModule>​+
  
-</​code>​+Certbot permet ensuite de générer tous les certificats et d'​adapter les configurations d'​Apache pour tous les noms de domaine associés aux hôtes virtuels au moyen d'une seule commande : 
 +<​code>​sudo certbot --apache</​code>​
  
-==== sites-available ====+Lors de l'​opération le script nous invite à cocher les domaines pour lesquels on souhaite obtenir les certificats et à choisir de forcer l'​usage de HTTPS ou pas. Pour des raisons de sécurité, c'est généralement une très bonne idée de forcer HTTPS.
  
-Ce répertoire contient ​les différents **vhosts**((Un vhost signifie //Virtual Host// ; //Hôte Virtuel//​.)) ​que vous utiliserez. Ils vous permettent ​de **définir plusieurs sites** sur une même machine,​\\ +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.
-le plus souvent des sous-domaines (**www**.domain.tld,​ **machin**.domain.tld...),​ mais aussi d'autres domaines (**domain**.tld,​ **autredomain**.tld...).\\ +
-<note note>Si vous voulez utiliser plusieurs hôtes virtuels voir [[:​tutoriel:​virtualhosts_avec_apache2|virtualhosts_avec_apache2]]</​note>​ +
-[[:​tutoriel:​comment_editer_un_fichier|Éditez le fichier]] **/​etc/​apache2/​sites-available/​default.conf** (le seul vhost existant pour le moment).+
  
-<code apache> +<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>​
-# NameVirtualHost définit les IPs à utiliser par apache+
-# * signifie qu'on utilise n'importe quel IP pour accéder au serveur +
-# 127.0.0.1 (boucle locale)192.168.x.x (ip reseau local), ou une IP externe. +
-# Cette directive est en dehors du Vhost, on pourrait donc la déplacer dans apache2.conf+
-# Dans tous les cas, si elle est définie à * , elle ne doit pas être reprise dans les autres vhosts. +
-NameVirtualHost *:80+
  
-# Le vhost proprement dit : il est compris dans un bloc <​VirtualHost>,​ +=== Renouvellement automatique ===
-# Ces blocs définissent la "​portée"​ de la validité des directives qui y sont définies. +
-# Le * derrière VirtualHost définit ici que le vhost est valable pour toutes les IP sur lesquelles apache écoute. +
-<​VirtualHost domain.tld:​80>​ +
-# ServerName définit le nom utilisé pour le vhost. Mettez le nom de l'​hôte du domaine +
-ServerName www.domain.tld +
-# ServerAlias définit les autres sous-domaines pour lesquels le serveur répondra. +
-ServerAlias domain.tld *.domain.tld +
-# ServerAdmin vous permet de spécifier un email à utiliser en cas de problème, sur une page d'​erreur 404 par exemple. +
-ServerAdmin administrateur.web@domain.tld +
-# DocumentRoot définit le dossier racine dans lequel seront stockés les fichiers du site. +
-DocumentRoot /​var/​www/​htdocs +
-        # Directory définit les options par défaut du répertoire +
- <​Directory /​var/​www/​htdocs>​ +
-                # Active les options : +
-                # FollowSymLinks permet de suivre les liens symboliques. +
-                # Indexes autorise le listage de fichiers d'un répertoire qui ne contient pas d'​index. +
- Options Indexes FollowSymLinks MultiViews +
-                # AllowOverride permet de surcharger certaines options en utilisant des fichiers .htaccess dans le répertoire du site. +
- AllowOverride None +
-                # Droits par defaut +
- Order allow,​deny +
- allow from all +
- # permet de rediriger les requêtes vers un fichier d'​index précis  +
- RedirectMatch ^/$ /​index.php +
- </​Directory>​+
  
- ErrorLog ​/var/log/apache2/error.domain.tld.log +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).
- CustomLog ​/var/log/apache2/access.domain.tld.log combined +
-</​VirtualHost>​+
  
-</​code>​+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.
  
-Enregistrez les changements sous un autre nom (ex: nomduvhost).+===== .htaccess ​ =====
  
-Supprimer l'​ancien lien symbolique ​de la configuration ​d'origine+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.)
  
-<​code>​sudo a2dissite default</​code>​+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.).
  
-Il faut maintenant **activer le vhost**. Pour cela il faut créer un **lien symbolique** du fichier ​**de sites-availablevers sites-enabled/**.\\ +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.
-En utilisant :+
  
-<code>sudo a2ensite nomduvhost</code>+<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 note> +Exemple de protection d'un répertoire et d'un fichier dans ce répertoire ​
-**a2dissite** ​Apache2 Disable Site\\ +<file - .htaccess
-**a2ensite** : Apache2 Enable Site +# la ligne ci-dessous va interdire (forbidden) l'​accès au répertoire,​ mais l'​accès à un fichier à la fois du répertoire reste autorisé 
-</note>  +RedirectMatch 403 ^/​~images/?​$ 
-Cette méthode ​du lien symbolique permet de réaliser rapidement des changements dans la configuration d'apache.+la ligne ci-dessous va retourner (not found), on peut mettre aussi 403, mais il peut être intéressant que la personne qui tente l'accès (un robot de hacker par exemple) croit que le fichier n'​existe pas ! 
 +RedirectMatch 404 ^/​~images/​fichier_à_protéger?​$ 
 +</​file>​
  
-[[:​tutoriel:​comment_editer_un_fichier|Éditez le fichier]] **/​etc/​hosts** et modifier la ligne avec nomduvhost le ServerName que vous avez choisi :+===== Index  =====
  
-<​file>​127.0.0.1 localhost nomduvhost</​file>​+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.
  
-Cela permettra à votre système de faire la correspondance entre le nom de l'​hôte ​et votre machine locale.+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''​.
  
-Notez que sous Debian/​Ubuntu 2 les pages a utiliser comme index sont spécifiées dans le module dir (mods-available/dir.conf).+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]]**.\\ 
 +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.
  
-== Activer les scripts CGI ====+<​note>​Toutes ces directives peuvent être définies dans une section //​[[#​hotes_virtuels|<​Directory>​]]//​ ou dans un fichier //​[[#​.htaccess]]//​.</​note>​
  
-Pour ce faire, rien de plus simple, ajoutez les lignes suivantes à votre "​apache2.conf"​ :+===== Modules ​ =====
  
-<​code>​ScriptAlias /cgi-bin/ /​var/​www/​votre_site/​cgi-bin/​ +Il est possible d'​ajouter des modules à Apache afin d'​étendre les fonctionnalités du serveur web.\\ 
- <​Directory ​/var/www/votre_site/​cgi-bin/> +Les modules disponibles sont répertoriés ici : ''​/etc/apache2/mods-available''​
- Options ExecCGI +
- AddHandler cgi-script cgi pl py +
- </​Directory>​ +
-</​code>​ +
-==== Sécuriser Apache ​ ====+
  
-  *  [[tutoriel/​securiser_apache2_avec_ssl|Sécuriser Apache2 avec SSL]] +==== mod_php ====
-  *  Voir la documentation [[http://​www.cgsecurity.org/​Articles/​apache.html]]+
  
-=== Sécurité des pages === +[[:PHP]] est un langage ​de programmation ​et un interpréteur qui permet principalement ​de générer ​du contenu HTMLC'​est ​donc une solution très largement utilisée pour créer des applications web ou des [[wpfr>​Page_web_dynamique|sites internet dynamiques]].
- Afin de modifier les pages nous allons créer ​un utilisateur **webadmin** le seul à pouvoir en créer, en supprimer et en modifier.\\ +
- En faisant ​de webadmin le propriétaire ​et de www-data le groupe, tous les autres utilisateurs ​du système ne pourront accéder aux fichiers grâce aux droits appliqués ensuite.\\ +
-Nous interdirons à apache2 de modifier les pages en autorisant seulement la lecture au groupe www-data (l'utilisateur sous lequel tourne apache et qui est aussi son groupe), et en donnant tous les droits au propriétaire.\\+
  
-__Création de l'​utilisateur webadmin:​__ +Il est très couramment utilisé en conjonction ​d'Apache. Voir [[:LAMP]].
-<​code>​sudo adduser webadmin</​code>​ +
-__Modification des propriétaires de tous les fichiers et dossiers du répertoire :__ +
-<​code>​sudo chown -Rf webadmin:​www-data /​var/​www</​code>​ +
-__RÉPERTOIRES lecture et exécution pour le group www-data et écriture pour le propriétaire 750 :__ +
-<​code>​sudo find /var/www -type d -exec chmod 750 {} \;</​code>​ +
-__FICHIERS lecture pour www-data et creation pour le propriétaire 640 :__ +
-<​code>​sudo find  /var/www -type f -exec chmod 640 {} \;</​code>​ +
-alternativement,​ pour modifier les droits (mais pas les propriétaires),​ il est possible ​d'utiliser les deux commandes suivantes: +
-<​code>​sudo chmod -R 644 /​var/​www</​code>​ +
-l'​interet est de ne pas lancer une multitude de commandes pour changer les droits (find lance la commande à chaque fois qu'il trouve un fichier correspondant) +
-qui a pour effet de mettre le propriétaire comme étant le seul avec droit de lecture et +
-<​code>​ sudo chmod a+X /​var/​www</​code>​ +
-qui ajoute le droit x aux dossiers uniquement (droit de traverser)+
  
-=== Pare-Feu === +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.
-__Sachant que  :__\\ +
-  - HTTP est un protocole utilisant TCP, +
-  - Le **serveur reçoit** sur le port **80** ou **443** ​ ( si SSL est utilisé [[tutoriel/securiser_apache2_avec_ssl|Sécuriser Apache2 avec SSL]] ) les requêtes, venant d'un port **supérieur à 1024 inclus**, ​d'**un client**, +
-   - Qu'il **répond** à ces requêtes sur ces **même ports vers les même ports**.\\+
  
-Nous allons pouvoir construire les règle ​de base qui autorise les entrées et la sortie du serveur vers ces ports.+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.
  
-__Le serveur est :__\\ +Pour installer et activer //mod_php// sous ubuntu, on utilise cette commande ​
-  * connecté directement à internet ​+<​code>​sudo apt install libapache2-mod-php</​code>​
-<​code>​ +
-ext_if="​eth0"​ +
-srv_www_ip="​SRV_WWW.INTERNET.IP.NUMBER"​ +
-# iptables ​-[A:​ajoute] ​-[i:​interface d'​entree|o:​interface de sortie] if_interface -[s:source] ip +
---[sport:​port source] port -[d|destination] ip --[dport:​destination port] port -J [ACCEPT:​accepter|REJECT:​rejeter] +
-iptables -A INPUT  -p tcp -i $ext_if --sport 1024: -d $srv_www_ip --dport 80, 443 -J ACCEPT +
-iptables -A OUTPUT -p tcp -o $ext_if -s $srv_www_ip --sport 80,443 -d --dport 1024: -J ACCEPT +
-done +
-</​code>​+
  
-  * sur le réseau local :+Mais encore une fois, mieux vaut vous reporter à la documentation de [[:LAMP]] à ce sujet.
  
-Le mode **forwarding** et les règles **NAT** doivent être activées. ​+==== mod_rewrite ====
  
-<​code>​ +**//​[[https://​httpd.apache.org/​docs/​current/​fr/​mod/​mod_rewrite.html|mod_rewrite]]//​** permet de réécrire des [[wpfr>​Uniform_Resource_Locator|URL]].
-ext_if="​eth0"​ +
-srv_www_ip_local="​SRV.local.IP.address"​+
  
-iptables –I PREROUTING –t nat –p tcp –i $ext_if –-–dport 80 –j DNAT –to $srv_www_ip_local:80 +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.
-iptables –I PREROUTING –t nat –p tcp –i $ext_if -–dport 443 –j DNAT –to $srv_www_ip_local:​443 +
-iptables –I FORWARD –p tcp –i $ext_if –d $srv_www_ip_local –-dport 80 –j ACCEPT +
-iptables –I FORWARD –p tcp –i $ext_if –d $srv_www_ip_local –-dport 443 –j ACCEPT+
  
-</code>+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//​.\\ 
 +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.
  
 +Pour activer ce module on utilisera la commande
 +<​code>​sudo a2enmod rewrite</​code>​
  
- +<note>L'​utilisation de //mod_rewrite// est relativement complexe ​et fait appel à des [[wpfr>Expression_régulière|expressions régulières]]. N'hésitez pas à consulter ​[[https://httpd.apache.org/docs/current/fr/rewrite/intro.html|la documentation officielle]] à ce sujet.\\ 
- +Pour la rédaction ​des expressions régulières, ​vous pouvez vous aider de services ​en ligne tels que [[https://regex101.com/|regex101.com]] ou [[https://regexr.com/|regexr.com]]</​note>​
-===== Utilisation ===== +
-<code>sudo service apache2 start | stop | restart | status </code> +
- +
-Il existe des interfaces graphiques pour utiliser Apache. De la plus simple à la plus complète : [[https://launchpad.net/localhost-indicator|localhost-indicator]] FIXME cassé ​et [[https://​launchpad.net/​rapache|rapache]]  +
- +
-==== Erreur au démarrage ==== +
- +
-Au démarrage d'​Apache,​ il est possible que celui-ci ne soit pas capable de déterminer un nom de domaine. Ce message sera affiché dans le terminal : +
- +
->Could not reliably determine the server'​s fully qualified domain name, using 127.0.1.1 for ServerName +
- +
-Pour corriger l'​erreur : +
-=== Première solution === +
-On doit [[:​tutoriel:​comment_modifier_un_fichier|éditer le fichier]] **/​etc/​apache2/​apache2.conf** +
- +
-Par défaut ce fichier est vide, il faut donc ajouter la ligne suivante: +
- +
-<​code>​ServerName localhost</​code>​ +
- +
-<note tip>On peut l'écrire aussi directement ​à la fin du fichier **/​etc/​apache2/​apache2.conf** si ça ne marche vraiment pas (ce qui a été mon cas).</​note>​ +
- +
-On enregistre, on quitte et on redémarre Apache : +
- +
-=== Deuxième solution === +
-On doit [[:tutoriel:​comment_modifier_un_fichier|éditer le fichier]] **/etc/hosts** +
- +
-Sur la première ligne, on trouve habituellement ça : +
-<​code>​127.0.0.1         ​localhost<​/code> +
- +
-Comme Apache2 ne sait pas extrapoler, il faut la modifier ainsi : +
-<​code>​127.0.0.1 ​        ​localhost.localdomain localhost</​code>​ +
- +
-Vous pouvez toujours mettre le nom réel de votre serveur, mais toujours sous un format [[http://fr.wikipedia.org/wiki/Fully_qualified_domain_name|FQDN]] +
- +
-<​code>​127.0.0.1 ​       Mon_Super_Serveur.maison localhost</​code>​ +
-//Le nom doit correspondre avec celui contenu dans /​etc/​hostname//​ +
-==== Redémarrer Apache2 ==== +
- +
-<​code>​ +
-sudo /​etc/​init.d/​apache2 restart +
-</​code>​ +
-ou +
-<​code>​ +
-sudo service apache2 restart +
-</​code>​ +
- +
-Il est aussi possible de redémarrer apache2 sans "​tuer"​ les requêtes en cours : +
-<​code>​apache2ctl graceful</​code>​ +
-Cette solution est plus élégante sur un serveur en production.\\ +
- +
-Nous pouvons maintenant passer à la phase de vérification.\\ +
- +
-S'il y a des messages d'​erreurs regarder les fichiers suivants :\\ +
-<​code>​ +
-tail -f /​var/​log/​syslog +
-tail -f /​var/​log/​apache2/​access.log +
-tail -f /​var/​log/​apache2/​error.log +
-</​code>​ +
- +
-==== Activer les fichiers .htaccess ==== +
- +
-Les .htaccess permettent de créer des zones administrateur protégées très facilement ou aussi d'​activer des configurations de façon localisées pour des serveurs auxquels ​vous n'avez pas accès au fichier de configuration principale. +
- +
-[[:​tutoriel:​comment_editer_un_fichier|éditez le fichier]] /​etc/​apache2/​sites-enabled/​000-default.conf +
- +
-<note tip>​Vous ​pouvez ​aussi éditer /​etc/​apache2/​apache2.conf plutôt que d'​utiliser des fichiers .htaccess (ne pas les activer par conséquent),​ ce qui est d'​ailleurs préférable \\ +
-__Selon la doc Apache :__ +
-//En général, ​vous ne devriez jamais utiliser les fichiers .htaccess à moins que vous n'ayez pas accès au fichier principal ​de configuration du serveur. Il y a, par exemple, une conception erronée qui prévaut selon laquelle les droits des utilisateurs doivent toujours être gérés dans le fichier .htaccess. Cela n'est simplement pas le cas. Vous pouvez placer les configurations des droits dans la configuration principale du serveur, et cela est, **en fait**, la manière favorisée de le faire.// +
- +
-//"In general, you should never use .htaccess files unless you don't have access to the main server configuration file. There is, for example, a prevailing misconception that user authentication should always be done in .htaccess files. This is simply not the case. You can put user authentication configurations in the main server configuration,​ and this is, in fact, the preferred way to do things.\\ +
-.htaccess files should be used in a case where the content providers need to make configuration changes to the server on a per-directory basis, but do not have root access on the server system."//​ cf: [[http://httpd.apache.org/docs/2.2/​howto/​htaccess.html#​when]] +
- </​note>​ +
- +
-Ajoutez ces lignes à la fin du fichier ​: +
-<​code>​ +
-<​Directory ​/var/www/​le_rep_ou_vous_voulez_activer_le_.htaccess>​ +
-    AllowOverride all +
-</Directory>​ +
-</​code>​ +
- +
-[[:​apache2#​redemarrer_apache2 ​Redémarrer ensuite apache]] et les .htaccess sont activés +
- +
-Si vous souhaitez autoriser les fichiers .htaccess partout (et pas uniquement dans un unique répertoire) il vous faudra remplacer "​AllowOverride none" par "​AllowOverride All" entre les balises ​<Directory ​/>​…</​Directory>​ et <​Directory /​var/​www/>​…</​Directory>​ du fichier /​etc/​apache2/​sites-enabled/​000-default.conf . +
- +
-<note>**Dossier invisible** : pour activer PHP 5 sur les hébergements Free.fr, un fichier .htaccess contenant "php 1" est nécessaire;​ la présence de celui-ci a pour conséquence de rendre le dossier conteneur invisible sous Apache.</​note>​ +
- +
-===== Modules ===== +
- +
-Il est possible d'​ajouter des modules à apache, ajoutant des fonctionnalités à votre serveur web. +
-Tous les modules sont répertoriés ici : /​etc/​apache2/​mods-available +
-==== Activer l'URL rewriting ==== +
- +
-Chargez le module rewrite : +
-<​code>​a2enmod rewrite</​code>​ +
- +
-Ensuite, deux possibilités s'​offrent à vous suivant vos capacités de gestion de votre serveur : +
-  * **pour un serveur mutualisé par exemple** : placer ​ un fichier .htaccess avec des règles de rewriting à la racine de votre site. Pour cela les fichiers .htaccess doivent être autorisés : [[:​apache2#​activer_les_fichiers_.htaccess | Activer les fichiers .htaccess]] +
-  * **pour un serveur dédié ou un serveur personnel** (sur votre propre distribution) il est conseillé d'​ajouter les règles de rewriting directement dans le fichier de configuration d'​Apache2 : /​etc/​apache2/​apache2.conf en recopiant les lignes suivantes à la fin dudit fichier. +
  
 Un petit exemple : Un petit exemple :
  
-<code> +<file>​RewriteEngine on
-Options +FollowSymlinks +
-RewriteEngine on+
  
-# Lorsque l'on tape dans la barre d'​adresse www.votre_domaine.net/​page-1 c'est la page www.votre_domaine.net/​page.php?​id=1 qui s'​affiche +RewriteRule ^page-([0-9]+)$ /​page.php?​id=$1 [L]
-[L]=[last] signifie que si cette règle s'​applique on n'en cherche pas d'​autre +
-RewriteRule ^page-1$ /​page.php?​id=1 [L]+
  
-</code>+# 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. 
 +# $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</file>
  
-Encore mieux avec les expressions régulières : +<​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>​ <​code>​
-Options +FollowSymlinks +    <​Directory /var/www/html> 
-RewriteEngine on +            ​AllowOverride All 
- +    </Directory>​
-# Lorsque l'on tape dans la barre d'​adresse www.votre_domaine.net/page-* c'est la page www.votre_domaine.net/page.php?​id=* qui s'​affiche +
-# ^ et $ signifie respectivement le début et la fin d'une expression régulière +
-RewriteRule ^page-([0-9]+)$ ​/page.php?​id=$1 [L] +
 </​code>​ </​code>​
 +</​note>​
 +==== mod_proxy====
  
-====Mod_bw - Limiter la bande passante====+Comme [[:​proxy|son nom l'​indique]],​ **//​[[https://​httpd.apache.org/​docs/​current/​fr/​mod/​mod_proxy.html|mod_proxy]]//​** permet à apache de relayer des requêtes depuis ou vers un service tiers.
  
-Il existe un module ​compatible avec apache2 permettant de limiter la bande passante.+Ce module ​peut par exemple être utile lorsqu'​on utilise d'​autres serveurs HTTP en plus d'​Apache sur un même serveur web, afin d'​éviter d'​avoir à accéder au contenu web sur d'​autres ports que le port 80 ou 443.
  
-**Installation du module ​:**  +<note warning>​L'​activation de ce module ​sur un serveur ouvert sur le web est dangereuse. Une mauvaise configuration permet par exemple à un intrus d'​accéder aux services disponibles sur le réseau local, ou d'​usurper votre adresse IP.\\ 
-[[apt>​libapache2-mod-bw]]+N'​activez ce module que si vous êtes certain de ce que vous faites.
  
-**Charger le module bandwidth ​:**  +Voir [[https://​httpd.apache.org/​docs/​current/​fr/​mod/​mod_proxy.html#​access|la documentation officielle à ce sujet]].</​note>​
-   sudo a2enmod bw+
  
-**Configuration du module :**+Pour activer ce module : 
 +<​code>​sudo a2enmod proxy proxy_http proxy_wstunnel 
 +sudo systemctl reload apache2</​code>​
  
-Pour cela il faut ajouter quelques lignes dans les Vhost de vos domaines ​:+Voici un exemple ​de configuration qui permet d'​accéder à un serveur [[https://​emby.media|emby]] à l'​adresse http://​example.com/​emby plutôt que http://​example.com:​8096 : 
 +<​file><​Location /emby> 
 + ProxyPass http://​localhost:​8096/​ 
 + ProxyPassReverse http://​localhost:​8096/​ 
 + Require all granted 
 + SetEnv proxy-nokeepalive 1 
 + SetEnv proxy-sendchunked 1 
 +</​Location></​file>​
  
-   cd /​etc/​apache2/​sites-enabled+==== mod_userdir ====
  
-   sudo vim votredomaine.tls.conf+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>//​.
  
-Juste avant //</VirtualHost>//, ajouter :+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 
 +echo 'Mon site personnel' ​~/public_html/index.html 
 +chmod -R 755 ~/​public_html</​code>​
  
-  * Limiter tous les utilisateurs à 10Kb/:+On active ensuite le module //​mod_userdir/​/ : 
 +<​code>​sudo a2enmod userdir 
 +sudo systemctl reload apache2</​code>​
  
-   ​BandwidthModule On +Le message //Mon site personnel// devrait alors être lisible à l'​adresse http://​localhost/​~nom_de_lutilisateur
-   ​ForceBandWidthModule On +
-   ​Bandwidth all 10240+
  
-  * Limiter tous les utilisateurs à 50Kb/s pour les fichiers supérieurs à 8000Kb :+<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>​
  
-   ​BandwidthModule On +==== mod_headers ====
-   ​ForceBandWidthModule On +
-   ​LargeFileLimit * 8000 50000+
  
-  * Limiter les fichiers ​.avi et .mpg à 20Kb/s :+Le module [[https://​httpd.apache.org/docs/​current/​fr/​mod/​mod_headers.html|headers]] permet de personnaliser les en-têtes HTTP. C'est à dire les informations envoyées par le serveur avant le document lui-même.
  
-   ​BandwidthModule On +C'est utile notamment pour améliorer la sécurité des sites webVoici quelques en-têtes qui peuvent être ajoutées à cette fin.
-   ​ForceBandWidthModule On +
-   ​LargeFileLimit ​.avi 1 20000 +
-   ​LargeFileLimit ​.mpg 1 20000+
  
-**Redémarrer Apache2**+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 :
  
-   sudo /etc/init.d/apache2 restart+<file - headers.conf> 
 +# Cet en-tête empêche MSIE d'​interpréter des fichiers comme quelque chose 
 +# d'​autre que ce qui est défini en dans que type de contenu dans les en-tes HTTP 
 +
 +Header set X-Content-Type-Options:​ "​nosniff"​
  
-====Mod_deflate ​Compression gzip====+# 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 protection contre les attaques par détournement de clic (clickjacking) 
 +# Attention cet en-tête est rendue obsolète par les CSP 
 +
 +Header set X-Frame-Options:​ "​sameorigin"​
  
-Le mod_deflate sur apache2 permet de gagner ​en rapidité ​et en bande passante grâce à la compression ​des données qui transitent entre le serveur et les clients. La compression utilisée est gzip. L'installation ci-dessous permet de compresser les fichiers texte (html, css,...).+# Cet en-tête est obsolète ​et doit être spécifiquement désactivée avec la valeur O 
 +# Pour une protection XSS, utilisez ​des CSP empêchant l'exécution des scripts « en ligne » 
 +Header set X-XSS-Protection "​0"​
  
-**Activation des modules deflate et headers : **  +En-tête qui permet ​de masquer la technologie utilisée (par exemple PHP 7.0) 
- +Pas une sécurité, mais inutile ​de transmettre cette information aux clients 
-   sudo a2enmod headers +
-   sudo a2enmod deflate +Header always unset "X-Powered-By"
- +
-**Configuration de deflate : ** +
- +
-Créez ou modifiez le fichier /​etc/​apache2/​conf.d/​mod_deflate.conf et ajoutez-y : +
- +
-   <​Location /> +
-   Insérer le filtre +
-   ​SetOutputFilter DEFLATE +
-   # Netscape 4.x rencontre quelques problèmes... +
-   ​BrowserMatch ^Mozilla/4 gzip-only-text/​html +
-   # Netscape 4.06-4.08 rencontre encore plus de problèmes +
-   ​BrowserMatch ^Mozilla/4\.0[678] no-gzip +
-   # MSIE se fait passer pour Netscape, mais tout va bien +
-   ​BrowserMatch \bMSIE !no-gzip !gzip-only-text/​html +
-   # Ne pas compresser les images +
-   ​SetEnvIfNoCase Request_URI \ +
-   ​\.(?:​gif|jpe?​g|png)$ no-gzip dont-vary +
-   ​S'​assurer que les serveurs mandataires délivrent le bon contenu +
-   ​Header append Vary User-Agent env=!dont-vary +
-   </​Location>​  +
- +
-**Redémarrage de apache2:​** +
-   sudo /​etc/​init.d/​apache2 restart +
- +
-Les pages seront compressées quand le client le supporte. +
- +
-<note tip>Si un message d'​erreur de ce type apparaît : +
- +
-apache2: Could not reliably determine the server'​s fully qualified domain nameusing 127.0.1.1 for ServerName. +
- +
-Voir [[apache2?&#​erreur_au_demarrage|ici]] </​note>​ +
-==== mod_userdir gérer les dossiers utilisateur ==== +
-Cette partie est déjà documentée sur [[:​xampp#​modifier_le_dossier_racine_du_serveur_apache|la page xampp]] ​mais reprenons le ici. +
- +
-Certaines personnes aimeraient faire en sorte à ce que chaque utilisateur du serveur puisse avoir son site web perso.\\ +
-Ce site peut être accessible par : http://​mondomaine.com/​~nom_du_user +
-<​note>​ dans la plupart des cas c'est http://​localhost/​~nom_du_user</​note>​ +
- +
- +
-=== Permettre à chaque utilisateur d'​avoir son propre site dans public_html === +
- +
-Créer un répertoire public_html et lui donner les droits ​de lecture et d'​exécution +
-<​code>​ +
-mkdir ~/​public_html +
-echo '<?​php echo "PHP est actif dans votre public_html";​ ?>' > ~/​public_html/​index.php +
-chmod -R 755 ~/​public_html +
-</​code>​ +
- +
-===Activer l'​exécution en php pour le module userdir (à partir de Ubuntu 10.04 (Lucid)) === +
-Editer /​etc/​apache2/​mods-enabled/​php5.conf et commenter les lignes correspondantes (avec ##) dans le fichier php5.conf qui se trouve dans /​etc/​apache2/​mods-enabled. +
- +
-<​file>​ +
-<​FilesMatch ​".+\.ph(p[345]?​|t|tml)$">​ +
-    SetHandler application/​x-httpd-php +
-</​FilesMatch>​ +
-<​FilesMatch ​".+\.phps$">​ +
-    SetHandler application/​x-httpd-php-source +
-    # Deny access to raw php sources by default +
-    # To re-enable it's recommended to enable access to the files +
-    # only in specific virtual host or directory +
-    Order Deny,​Allow +
-    Deny from all +
-</​FilesMatch>​ +
-# Deny access to files without filename (e.g. '​.php'​) +
-<​FilesMatch "​^\.ph(p[345]?​|t|tml|ps)$">​ +
-    Order Deny,​Allow +
-    Deny from all +
-</​FilesMatch>​ +
- +
-# Running PHP scripts in user directories is disabled by default +
-#  +
-# To re-enable PHP in user directories comment the following lines +
-# (from <​IfModule ...> to </​IfModule>​.) Do NOT set it to On as it +
-# prevents .htaccess files from disabling it. +
-##<​IfModule mod_userdir.c>​ +
-##    <​Directory /​home/​*/​public_html>​ +
-##        php_admin_flag engine Off +
-##    </​Directory>​ +
-##</​IfModule>​+
 </​file>​ </​file>​
  
-== (Pour mémoire) ​ Ancienne version de php5.conf == +Vous pouvez ensuite activer ​le module ​
-<​file>​ +<​code>​sudo a2enmod ​headers</​code>​ et recharger la configuration d'Apache.
-<​IfModule mod_php5.c>​ +
-    <​FilesMatch "​\.ph(p3?​|tml)$">​ +
- SetHandler application/​x-httpd-php +
-    </​FilesMatch>​ +
-    <​FilesMatch "​\.phps$">​ +
- SetHandler application/​x-httpd-php-source +
-    </​FilesMatch>​ +
-    # To re-enable php in user directories comment the following lines +
-    # (from <​IfModule ...> to </​IfModule>​.) Do NOT set it to On as it +
-    # prevents .htaccess files from disabling it. +
-    ##<​IfModule mod_userdir.c>​ +
-    ##      <​Directory /​home/​*/​public_html>​ +
-    ##        php_admin_value engine Off +
-    ##     </​Directory>​ +
-    ##</​IfModule>​ +
-</​IfModule>​ +
-</​file>​ +
- +
-===Optionnel : Personnaliser votre répertoire de site === +
-  +
-Il est possible de changer ​le dossier par défaut (public_html) de votre site par un autre répertoire. +
- +
-==Éditer le fichier de configuration de userdir == +
- +
-Modifier la variable <<​UserDir public_html>>​ dans le fichier /​etc/​apache2/​mods-available/​userdir.conf ​: +
-<​file><​IfModule mod_userdir.c>​ +
- UserDir public_html +
- UserDir disabled root +
- +
- <​Directory /​home/​*/​public_html>​ +
- AllowOverride FileInfo AuthConfig Limit Indexes +
- Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec +
- <Limit GET POST OPTIONS>​ +
- Require all granted +
- </​Limit>​ +
- <​LimitExcept GET POST OPTIONS>​ +
- Require all denied +
- </​LimitExcept>​ +
- </​Directory>​ +
-</​IfModule>​ +
- +
-# vim: syntax=apache ts=4 sw=4 sts=4 sr noet +
-</​file>​ +
- +
-===Activer le module userdir=== +
-<​code>​ +
-sudo a2enmod ​userdir +
-sudo /​etc/​init.d/​apache2 reload +
-</​code>​ +
- +
-Dans le navigateur web rendez-vous à l'​adresse http://​127.0.0.1/​~nom_du_user ​et vérifier que le message <<//​PHP est actif dans votre public_htm//>>​ s'affiche. +
- +
- +
-==== mod_proxy ou comment rediriger certains domaines vers certaines machines ====+
  
-Mon problème était le suivant :+Les en-têtes peuvent également être définies au niveau de chaque site dans les fichiers d'​hôte virtuels.
  
-**routeur ​:** +Si vous utilisez HTTPS, vous voudrez certainement définir l'​en-tête [[wpfr>​HTTP_Strict_Transport_Security|Strict-Transport-Security]],​ exemple ​
-  renvoi du port 80 sur la machine 192.168.0.10+<​file><​VirtualHost ​*:443> 
 + … 
 + Header always set Strict-Transport-Security:​ "​max-age=31536000;​includeSubDomains;​preload"​ 
 +</​VirtualHost></​file>​
  
-**machine 192.168.0.10 ​:** +Enfin, toujours dans un objectif de sécurité, vous devez utiliser les en-têtes [[https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP|Content-Security-Policy]],​ exemple :
-  * virtualhosts renvoyant vers plusieurs dossiers +
-  * toto.mondomaine.com va vers /home/toto/www +
-  * titi.mondomaine.com va vers /home/titi/www +
-  * etc... +
-  * et 000-default va vers /var/www+
  
-**machine 192.168.0.11 ​:*+<​file>​Header always set Content-Security-Policy"​default-src '​self';​ img-src ​*; media-src media1.com media2.com; script-src userscripts.example.com"</file>
-  * virtualhosts renvoyant vers plusieurs dossiers +
-  * tata.mondomaine.com va vers /​home/​tata/​www +
-  * tutu.mondomaine.com va vers /​home/​tutu/​www +
-  * etc... +
-  * et 000-default va vers /var/www+
  
-Sauf que si on met http://tata.mondomaine.com dans son navigateur ​on se retrouve avec le site par defaut de 192.168.0.10....+Pour voir les en-têtes envoyées par votre serveur vous pouvez utiliser des outils en ligne de commande comme : 
 +<​code>​curl -I https://example.com</​code>​ ou une extension du navigateur ​web qui permet d'​afficher les en-têtes HTTP.
  
-Donc, il faut appeller mod_proxy à la rescousse.+==== Modsecurity ====
  
-sur 192.168.0.10 : +Il s'agit d'un pare-feu pour Apache.
-activer le module proxy avec : +
-  a2enmod proxy +
-créer ​un virtualhost /​etc/​apache2/​sites-available/​tata.mondomaine.com qui contient :+
  
-  <​VirtualHost 192.168.0.10:80> +Une [[:modsecurity|page de la documentation]] est consacrée à ce module.
-          ProxyRequests Off +
-          ProxyPreservehost on +
-          ServerName tata.mondomaine.com +
-          ProxyPass ​ / http://​192.168.0.11/​ +
-          ProxyPassReverse / http://​192.168.0.11/ +
-          <​Proxy>​ +
-              Order Allow,​Deny +
-              Allow from all +
-          </​Proxy>​ +
-  </​VirtualHost>​+
  
-Activer ce fichier : +===== Sécurité ​ =====
-  sudo a2ensite tata.mondomaine.com+
  
-Redémarrer apache+<note important>​Sans chiffrer les communications avec le module //SSL//, toutes les informations échangées entre le navigateur et le serveur, contenu web et variables d'​authentification,​ transitent en clair sur Internet. Une des premières règles de sécurité pour Apache est donc de forcer l'​utilisation de [[#​HTTPS]].</​note>​
  
-Et c'est tout :)+==== Permissions ====
  
-Si ca veut pasactiver aussi les modules proxy_http ​et proxy_connect+Par défaut sur UbuntuApache est exécuté par l'​utilisateur //​www-data//,​ qui appartient au groupe //​www-data//​.\\ 
 +Quand Apache créé un fichier sur l'​espace disque (via par exemple un [[#​mod_php|script PHP]]), celui-ci appartient donc par défaut à l'​utilisateur //​www-data// ​et au groupe //​www-data//​. De la même manière, le serveur ne peut accéder qu'au contenu accessible par //​www-data//​.
  
-bien sûr on peut rajouter dans /etc/hosts: +Pour des raisons de sécurité il est recommandé de modifier le propriétaire des fichiers auxquels ​peut accéder Apache.\\ 
-  192.168.0.11 tata.mondomaine.com+Le propriétaire devrait être l'​utilisateur qui va maintenir le contenu localement, mais le groupe propriétaire devrait rester //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>​
  
-comme ça, dans ProxyPass et ProxyPassReverse on peut utiliser ​les noms de domaine ​à la place des adresses+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.
  
-et comme c'est un proxybeaucoup d'autres options sont envisageables mais je n'irai pas plus loin pour aujourd'hui.+On attribue donc les [[:​droits]] ​''%%rwx r-x ---%%''​ (750) pour les répertoireset ''​%%rw- r-- ---%%''​ (640) pour les fichiers : 
 +<​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)
  
-===== Optimiser votre serveur apache2 =====+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>​
  
-Il est possible d'​optimiser votre serveur apache.+==== Fail2ban ====
  
-====Accélérateurs PHP====+Pour limiter les attaques par force brute sur un système d'​authentification d'une application web, il est parfois recommandé d'​utiliser l'​application [[:​Fail2ban]].
  
-Permet de mettre en cache le code PHP déjà compilé. Ceci évitera de recompiler les fichiers PHP à chaque fois, ce qui augmente de façon considérable les performances de votre serveur et donc de vos sites.+===== Problèmes courants =====
  
-__**Voici un comparatif de ce qui existe actuellement :**__+<note tip>En cas d'​erreur du serveur, consultez avant tout les rapports d'​erreurs dans le répertoire ''/​var/​log/​apache2''​.
  
-[[http://dotclear.placeoweb.com/post/PHP-accelerator-cache]]+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>​
  
-=== XCache ===+<note tip>Si vous rencontrez un problème avec PHP, consultez également les [[:​php#​problemes_courants|problèmes courants spécifiques à PHP]].</​note>​
  
-Plus moderne et a été réécrit de zéro récemment. Il assure un meilleur support des versions récentes de PHP, au contraire des anciens eaccelerator and co.+==== Page blanche ====
  
-[[:xcache]]+Si vous utilisez PHP, une page blanche indique très probablement que l'​affichage des retours d'​erreur sur la page n'est pas activé.
  
-=== eAccelerator ===+Vous pouvez l'​activer en suivant [[php#​activer_le_rapport_d_erreur|cette documentation]].
  
-[[:​eaccelerator]] 
  
 +==== Erreur 403 ====
  
-===== Empêcher le démarrage automatique ​d'apache ===== +Une erreur 403 indique un problème ​d'autorisation.
-<note warning> Méthode déconseillée pour un serveur en production ! </​note>​+
  
-<​note>​Dans le cas d'un ordinateur ​de bureau, **apache*est souvent utilisé ​de façon occasionnelle pour développer et tester en local.+  * 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.  
 +  ​Il est aussi possible que cette erreur soit affichée faute de fichier [[#index]].
  
-Pour les amoureux de l'​écologie c'est de l'​énergie gaspillée sans raison valable. ​+==== Erreur 404 ====
  
-Pour les machines à faibles ressourcesapache diminue ​la vitesse ​de démarrage ​ +Cette erreur indique que le contenu demandé n'a pas été trouvé. 
 +  * En premier lieu vérifiez évidemment l'​existence des contenus concernés. 
 +  * Le chemin vers ce contenu sur l'​espace disquerelatif à 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]].
  
-Autant de raisons valables pour démarrer manuelle apache quand nous en avons besoin et enlever le <<​[[https://​fr.wikipedia.org/​wiki/​Daemon_%28informatique%29|daemon]]>>/​service de démarrage automatique ! </​note>​+==== Erreur 500 ====
  
-==== Modifier le service apache avec upstart ==== +Il s'agit d'une erreur fatale du serveur, qui peut être par exemple ​liée à une erreur de syntaxe dans un fichier ​[[#.htaccess]].
-Se reporter à l'​exemple ​[[upstart#utilisation|Upstart]]+
  
-====  +Consultez ​le log d'erreur de votre hôte virtuel pour en savoir plus.
-==== Restaurer ​le démarrage automatique ​d'apache avec update-rc.d ====+
  
-<​code>​ user@PCMachine:​~$ sudo update-rc.d apache2 default </​code>​+==== 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 ====
  
-===== Désinstallation =====+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/​
  
-Pour supprimer cette application,​ il suffit de :\\ +<​Directory "/​usr/​share/​javascript/">​ 
-  * [[:​tutoriel:​comment_supprimer_un_paquet|supprimer les paquets]]. Vous devez supprimer tous les paquets que vous avez installés. ​La configuration ​de l'application sera conservée ou supprimée selon la méthode ​de désinstallation que vous choisirez ('sudo apt-get purge [paquet]' ​pour virer les configs et les fichiers, 'sudo apt-get remove [paquet]' ​pour garder la config.)\\+        Options FollowSymLinks MultiViews 
 +</​Directory></​file>​ 
 +La solution est soit de supprimer ce paquet, soit de renommer le répertoire ''​javascript'​' ​à la racine ​de l'hôte virtuelpar exemple en ''​js''​.
  
 ===== Liens utiles ===== ===== Liens utiles =====
  
-   * (en) [[http://​apache.org/​|Site officiel ​Projets ​Apache]] +   * (en) [[https://​apache.org/​|Site officiel ​du projet ​Apache]] 
-   * [[http://​httpd.apache.org/​docs/​|Documentation Apache]] +   * [[https://​httpd.apache.org/​docs/current/​|Documentation Apache ​officielle en français]] 
-   * [[tutoriel/​securiser_apache2_avec_ssl]] +   * [[tutoriel/​securiser_apache2_avec_ssl|Sécuriser Apache 2 avec SSL]] 
-   * [[lamp |installer un serveur LAMP]] +   * [[:lamp|installer un serveur LAMP]] 
-   * [[lamp_plus|serveur LAMP aller plus loin]] +   * [[:​tutoriel:​lamp_repertoires_de_travail|Serveur LAMP - Créer un/des répertoires de travail]] 
-   ​* ​(fr) [[https://​www.it-connect.fr/​cours-tutoriels/​administration-systemes/​serveur-web/​apache/​|Plusieurs tutoriels sur la configuration d'​Apache sur IT-Connect]] +   * [[:​docker_lamp|installer un serveur LAMP avec Docker]] 
-   ​* ​(fr) [[http://documentation.online.net/fr/​serveur-dedie/​tutoriel/​installation-solution-lamp_apache-php-mysql]]+   * [[https://​www.it-connect.fr/​cours-tutoriels/​administration-systemes/​serveur-web/​apache/​|Plusieurs tutoriels sur la configuration d'​Apache sur IT-Connect]] 
 +   ​* ​discussion au sujet de cette documentation sur le forum : https://forum.ubuntu-fr.org/viewtopic.php?​pid=21886288
        
  
 ---- ----
-// Contributeurs : [[:​utilisateurs:​benje]],​ [[:​utilisateurs:​Pepou06]],​ [[:​utilisateurs:​Oxossi]],​ [[:​utilisateurs:​Karting06]],​ [[:​utilisateurs:​albanmartel]]. //+// Contributeurs : --- //​[[:​utilisateurs:​bruno|bruno]],​ [[:​utilisateurs:​krodelabestiole]], ​[[:​utilisateurs:​benje]],​ [[:​utilisateurs:​Pepou06]],​ [[:​utilisateurs:​Oxossi]],​ [[:​utilisateurs:​Karting06]],​ [[:​utilisateurs:​albanmartel]]. //
  • apache2.1516085929.txt.gz
  • Dernière modification: Le 16/01/2018, 07:58
  • par 82.251.241.242