Contenu | Rechercher | Menus

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 08/05/2013, 15:40]
109.28.132.11 [Installation]
apache2 [Le 20/04/2018, 13:30] (Version actuelle)
80.78.5.112 [Sécurité]
Ligne 1: Ligne 1:
-{{tag>​réseau serveur }}+{{tag>​réseau serveur ​internet}}
  
 ---- ----
 +{{ apache_logo.png?​80nolink| Logo du logiciel Apache 2}}
  
 ====== Serveur HTTP Apache 2 ====== ====== Serveur HTTP Apache 2 ======
  
-**Apache** 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 [[https://​fr.wikipedia.org/​wiki/​Serveur_HTTP|serveur HTTP]] permet à un serveur web de communiquer avec un navigateur en utilisant le protocole [[https://​fr.wikipedia.org/​wiki/​Hypertext_Transfer_Protocol|HTTP(S)]] et ses extensions ([[https://​fr.wikipedia.org/​wiki/​WebDAV|WebDAV]],​ etc.). ​**Apache** est probablement le serveur HTTP le plus populaire. C'est donc lui qui met à disposition la plupart ​des sites internet du [[https://​fr.wikipedia.org/​wiki/​World_Wide_Web|WWW]].\\ 
 +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 [[:​tutoriel:​securiser_apache2|sécuriser Apache]] ; +
-    * 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.\\+
  
-===== Pré-requis =====+<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]].
  
-  * Quelques connaissances de base des protocoles HTTP, DNS 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èmenotamment ​///usr/share/doc/apache2/README.Debian.gz//, ainsi que les pages de manuel.</​note>​
-  * Un réseau local en état de marche (IP attribuées,​ connexion à internet) ; +
-  * Un serveur ​    ​[[:​bind9|DNS]] configuré (pour le domaine). +
- +
-===== Introduction : HTTP l====== +
-==== 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. +
- +
-Un site Web a une adresse, comme celle du site Ubuntu-fr : http://​ubuntu-fr.org.\\ +
-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. +
- +
-==== 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\\ +
-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é.\\ +
-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]] \\ +
-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**.\\ +
- +
-Un document **[[wpfr>​Hypertexte|hypertexte]]** est un document contenant des **[[wpfr>​Hyperlien|hyperliens]]**.\\ +
-Ceux-ci permettent de lier les pages les unes avec les autres. Ainsi, vous pouvez naviguer grâce à des liens sur les pages.\\ +
-Cet ordinateurauquel 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é]]. +
- +
-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é//​.)).\\ +
-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é**.\\ +
-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 ==== +
- +
-Au moment de son démarrage, Apache charge les [[#fichiers de configuration]] de la machine locale et se met en attente de requêtes sur les interfaces réseaux. +
- +
-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,​ +
-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). +
- +
-<note tip>Voir la [[projets:​ecole:​apache|page de cours sur Apache de #​u-classroom]] +
- +
-[[wpfr>​Hypertext_Transfer_Protocol|Plus d'​informations concernant le protocole HTTP…]] +
- +
-[[wpfr>​Apache_HTTP_Server|Plus d'​informations concernant Apache HTTP Server…]] +
-</​note>​ +
-Pour installer un serveur HTTP, nous allons utiliser une application bien connue des administrateurs réseaux : Apache2.+
  
 ===== Installation ===== ===== Installation =====
  
-Apache ​est composé de plusieurs paquets. +Pour installer ​Apache ​seul[[:tutoriel:comment_installer_un_paquet|installez simplement le paquet]] **[[apt>​apache2|apache2]]**.
- +
-béta installation apache 2.4.4 +
- +
-installer les depots officiel multiverse et backport ainsi que leur sources +
- +
-ex ubuntu 12.04 +
- +
- +
-<​code>​sudo su</​code>​ +
-<​code>​cat > /​etc/​apt/​sources.list <<​EOF +
-deb http://​fr.archive.ubuntu.com/​ubuntu/​ precise main restricted +
-deb http://​security.ubuntu.com/​ubuntu precise-security main restricted +
-deb http://​fr.archive.ubuntu.com/​ubuntu/​ precise-updates main restricted +
- +
-# Dépôts de sources (uniquement utiles pour télécharger les sources avec apt-get source. Dans ce casenlever les #) +
-deb-src http://​fr.archive.ubuntu.com/​ubuntu/​ precise main restricted +
-deb-src http://​security.ubuntu.com/​ubuntu precise-security main restricted +
-deb-src http://​fr.archive.ubuntu.com/​ubuntu/​ precise-updates main restricted +
- +
-deb http://​fr.archive.ubuntu.com/​ubuntu/​ precise universe multiverse +
-deb http://​security.ubuntu.com/​ubuntu precise-security universe multiverse +
-deb http://​fr.archive.ubuntu.com/​ubuntu/​ precise-updates universe multiverse +
- +
-# Dépôts de sources (uniquement utiles pour télécharger les sources avec apt-get source. Dans ce cas, enlever les #) +
-deb-src http://​fr.archive.ubuntu.com/​ubuntu/​ precise universe multiverse +
-deb-src http://​security.ubuntu.com/​ubuntu precise-security universe multiverse +
-deb-src http://​fr.archive.ubuntu.com/​ubuntu/​ precise-updates universe multiverse +
-deb http://​fr.archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse+
  
-# Dépôts de sources (uniquement utiles pour télécharger les sources ​avec apt-get source. Dans ce casenlever les #+Pour installer Apache ​avec PHP et MySQL ou MariaDBreportez vous à l'​[[:​lamp#installation|installation de LAMP]].
-deb-src http://​fr.archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse +
-EOF +
-exit</​code>​+
  
 +À la suite de cette installation votre serveur doit fonctionner et être accessible à l'​adresse [[http://​localhost]] (à partir de la même machine).
  
-installer les dépendance+Un message //It Works!// devrait s'​afficher dans votre navigateur. Il s'agit du contenu du fichier ///​var/​www/​html/​index.html//​ qui est affiché par défaut.
  
 +===== Lancement =====
  
-<​code>​sudo apt-get update</​code>​ +Apache 2 se lance par défaut dès son installation,​ et se relance automatiquement à chaque démarrage.
-<​code>​sudo apt-get -y upgrade</​code>​ +
-<​code>​sudo apt-get -y install git vim libmcrypt-dev</​code>​ +
-<​code>​sudo apt-get -y purge apache2 php5</​code>​ +
-<​code>​sudo apt-get -y build-dep apache2 php5</​code>​+
  
 +==== Empêcher Apache de démarrer automatiquement ​ ====
  
 +Pour empêcher cela :
 +<​code>​sudo systemctl disable apache2</​code>​
 +==== Réactiver le démarrage automatique ====
  
 +Pour de nouveau relancer Apache automatiquement au démarrage de la machine, c'est simple :
 +<​code>​sudo systemctl enable apache2</​code>​
  
 +==== Autres commandes utiles ====
  
-compilation manuelle+Pour arrêter apache2 : 
 +<​code>​sudo systemctl stop apache2</​code>​
  
-<​code>​cd /​usr/​local/​src</​code>​ +Pour lancer apache2 ​
-<​code>​git clone https://​github.com/​apache/​httpd.git httpd-2.4.4</​code>​ +<​code>​sudo ​systemctl start apache2</​code>​
-<​code>​cd httpd-2.4.4</​code>​ +
-<​code>​git clone https://​github.com/​apache/​apr.git srclib/​apr</​code>​ +
-<​code>​./​buildconf</​code>​ +
-<​code>​./​configure -enable-modules=all --with-included-apr --enable-mpm=worker --enable-suexec --enable-rewrite</​code>​ +
-<​code>​make</​code>​ +
-<​code>​sudo apt-get -y install checkinstall</​code>​ +
-<​code>​sudo ​checkinstall --pkgname=apache2-4 --pkgversion="​2.4.4"​ --backup=no --deldoc=yes --fstrans=no --default</​code>​ +
-<​code>​mkdir $HOME/​deb</​code>​  +
-<​code>​sudo mv *.deb $HOME/​deb</​code>​ +
-vous pouvez récupérer le pacquet deb dans votre répertoire perssonelle $HOME/deb +
-celui ci a déjà était installer+
  
 +Pour relancer apache2 : 
 +<​code>​sudo systemctl restart apache2</​code>​
  
 +Pour recharger la configuration d'​apache2 :
 +<​code>​sudo systemctl reload apache2</​code>​
    
 +Pour voir la version d'​Apache utilisée :
 +<​code>​sudo apache2ctl -v</​code>​
  
-installation depuis pacquet deb ubuntu 12.04 and 64 uniquement+Pour tester l'​ensemble de la configuration d'​Apache : 
 +<​code>​sudo apache2ctl -t</​code>​
  
 +Pour tester la configuration des hôtes virtuels :
 +<​code>​sudo apache2ctl -t -D DUMP_VHOSTS</​code>​
  
-<​code>​wget http://​www.petit-fichier.fr/​2013/​05/​08/​apache2-4-2-4-4-1-amd64/​apache2-4-2-4-4-1-amd64.deb</​code>​ +Pour voir les modules d'​Apache chargés ​
-<​code>​sudo ​dpkg -i apache2-4-2-4-4-1-amd64.deb</​code>​+<​code>​sudo ​apache2ctl ​-M</​code>​ 
 +===== Mode de fonctionnement sommaire =====
  
-configurer+Lorsqu'​il démarre, Apache charge les fichiers de configuration et se met en attente de requêtes sur les interfaces réseaux. On dit qu'il écoute (//listen// en anglais) certains ports.
  
 +Lorsqu'​on utilise un navigateur web, que l'on clique sur un lien ou qu'on rentre directement une [[web#​url|URL]] dans la barre d'​adresse,​ on effectue une requête : 
 +  * 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 sur le même port (80 ou 443).
 +  * Le navigateur traite le contenu et le rend accessible à l'​internaute (en l'​affichant à l'​écran par ex.).
  
-<​code>​sudo ln -s /​usr/​local/​apache2/​bin/​* /​usr/​local/​bin/</​code>​ +Voilà comment fonctionne (grossièrement ;-) ) un serveur web.
-<​code>​sudo rm -rf /​etc/​init.d/​apache2</​code>​ +
-<​code>​sudo ln -s /​usr/​local/​bin/​apachectl /​etc/​init.d/​apache2</​code>​ +
-<​code>​sudo update-rc.d -f apache2 remove</​code>​ +
-<​code>​sudo sed -i '​s|Define DOCROOT "/​usr/​local/​apache2/​htdocs"​|Define DOCROOT "/​var/​www"​|'​ /​usr/​local/​apache2/​conf/​httpd.conf</​code>​ +
-<​code>​sudo chown -Rf www-data:​www-data /​var/​www</​code>​ +
-<​code>​sudo update-rc.d -f apache2 defaults 91 09</​code>​ +
-<​code>​sudo /​etc/​init.d/​apache2 stop</​code>​ +
-<​code>​sudo mkdir /​usr/​local/​apache2/​logs/</​code>​ +
-<​code>​sudo /etc/init.d/apache2 start</​code>​+
  
-désinstaller+===== Fichiers de configuration =====
  
-<​code>​sudo /etc/init.d/apache2 stop +Un seul serveur Apache permet de déployer simultanément plusieurs sites et services qu'il faut configurer individuellement.\\ 
-sudo rm -f /usr/​local/​bin/​ab /​usr/​local/​bin/​apachectl /​usr/​local/​bin/​apr-2-config /​usr/​local/​bin/​apxs /​usr/​local/​bin/​checkgid /​usr/​local/​bin/​dbmmanage /​usr/​local/​bin/​envvars /​usr/​local/​bin/​envvars-std /​usr/​local/​bin/​fcgistarter /​usr/​local/​bin/​firehose /​usr/​local/​bin/​htcacheclean /​usr/​local/​bin/​htdbm /​usr/​local/​bin/​htdigest /​usr/​local/​bin/​htpasswd /​usr/​local/​bin/​httpd /​usr/​local/​bin/​httxt2dbm /​usr/​local/​bin/​logresolve /​usr/​local/​bin/​rotatelogs /​usr/​local/​bin/​suexec +Pour plus de clarté, la configuration ​d'​Apache2 est donc morcelée, mais tous les fichiers de configuration se situent dans le répertoire ​///​etc/​apache2// ​:
-sudo update-rc.d -f apache2 remove +
-sudo rm -rf /etc/init.d/apache2 +
-sudo apt-get -y purge apache2-4 +
-sudo rm -rf /usr/local/​apache2</​code>​ +
-====Installation de base====+
  
-=== Versions Jusqu'​à Ubuntu 6.06 === +  * //​sites-available//​ contient les fichiers de configuration des **sites** disponibles 
-[[:tutoriel:​comment_installer_un_paquet|Installez les paquets]] **[[apt>​apache2,apache2-utils,apache2-mpm-prefork,​libapache2-mod-chroot,​libapache2-mod-auth-pam,​libapache2-mod-auth-sys-group|apache2 apache2-utils apache2-mpm-prefork libapache2-mod-chroot libapache2-mod-auth-pam libapache2-mod-auth-sys-group]]**\\+  * //​sites-enabled//​ contient des [[:lien_physique_et_symbolique|liens symboliques]] vers les configurationsdans //site-available//des sites activés ​
  
-=== Versions antérieures à Ubuntu 10.04 === +  * //​conf-available//​ contient les fichiers de configuration des **autres services** disponibles 
-[[:tutoriel:​comment_installer_un_paquet|Installez les paquets]] **[[apt>​libapr1,apache2,​apache2.2-common,apache2-utils|libapr1 apache2 apache2.2-common apache2-utils]]**.+  * //​conf-enabled//​ contient des [[:lien_physique_et_symbolique|liens symboliques]] vers les configurationsdans //conf-available//des autres services activés
  
-=== Depuis Ubuntu 10.04=== +  * //​mods-available//​ contient les fichiers de configuration des **modules** d'​Apache disponibles 
-[[:tutoriel:​comment_installer_un_paquet|Installez le paquet]] **[[apt>​apache2|apache2]]**.+  * //​mods-enabled//​ contient des [[:lien_physique_et_symbolique|liens symboliques]] vers les configurations,​ dans //​mods-available//,​ des modules 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).+<note important>​Normalement les fichiers ​de configuration globale //​apache2.conf//,​ //​envars// ​et //ports.conf//​ n'ont pas à être modifiés. Toute la configuration devrait se faire dans les sous dossiers //​xxx-available//​.</​note>​
  
-Un beau message va s'​afficher dans votre navigateur ​ **It Works**, c'est le contenu du fichier **/var/www/index.html** ​(configuration par défaut) +Les diverses configurations sont activées (//a2en// pour //Apache 2 enable//) ou désactivées ​(//a2dis// pour //Apache 2 disable//avec les commandes suivantes :
-====La bibliothèque,​ le serveur et ses outils====+
  
-^ 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 compteou 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-safeC'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. |+
  
 +==== Configuration des ports d'​écoute ====
  
-===== Configuration =====+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é.
  
-<note note>​Remise en question de la part d'un adminsys : cette section donne un ensemble de fichiers de configurationen 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>​+Sauf cas très particulieril n'est pas nécessaire ​de toucher à cette configuration.
  
- Tous les **fichiers de configuration** de Apache2 sont dans le dossier **/​etc/​apache2**.\\+===== Hôtes virtuels =====
  
-==== /etc/apache2 ==== +Sur Apache, chaque site ou service correspond en principe à un hôte virtuel (//**[[https://httpd.apache.org/​docs/​current/​fr/​vhosts/​examples.html|VirtualHost]]**//​ en anglais).
-Rendez-vous dans le répertoire ​/etc/apache2/, et regardez les fichiers le composant : +
-  apache2.conf  conf.d  envvars ​ httpd.conf  mods-available ​ mods-enabled ​ ports.conf  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 ​====
-  * **''​httpd.conf''​** est le fichier utilisé par apache1, il est conservé vide dans Apache2 pour assurer la rétrocompatibilité. Il ne nous servira pas ; +
-  * **''​envvars''​** est utilisé pour définir des variables d'​environnement propres à Apache ; +
-  * **''​ports.conf''​** contient la directive listen qui spécifie les adresses et les ports d'​écoutes ; +
-  * **''​apache2.conf''​** est le fichier principal de configuration c'est à partir de lui que tous les autres fichiers sont chargés ; +
-  * **''​conf.d''​** est un répertoire qui contient plusieurs petits fichiers qui seront analysés par apache. Le seul fichier pour le moment est ''​charset'',​ qui spécifie l'​encodage à utiliser par défaut ​+
-  * **''​mods-available''​** contient la liste des modules d'​apache installés ; +
-  * **''​mods-enabled''​** celle des modules utilisés ; +
-  * **''​sites-available''​** contient la liste des vhosts installés ; +
-  * **''​sites-enabled''​** celle des vhosts utilisés.+
  
-==== Configuration des interfaces ====+Par défaut, il existe 2 hôtes virtuels. ​
  
-La spécification des **interfaces** sur lesquelles **Apache2 écoutera** les requêtes se fait dans **ports.conf** avec la directive **Listen**.\\ +Le premier est défini ​dans le fichier ///​etc/​apache2/​sites-available/​000-default.conf// :
-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.\\ +<file - 000-default.conf><​VirtualHost ​*:80> 
- 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** .\\ + ServerAdmin webmaster@localhost 
- - 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** .\\ + DocumentRoot /​var/​www/​html 
- - 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**.\\+ ErrorLog ${APACHE_LOG_DIR}/​error.log 
 + CustomLog ${APACHE_LOG_DIR}/​access.log combined 
 +</​VirtualHost></​file>​
  
-[[:​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 )\\+^ directive ^ description ^ 
 +<​file><​VirtualHost ​*:80></file> | On déclare l'​hôte virtuel, il doit répondre à toutes les adresses IP qui s'​adressent à lui (*) sur le port 80On peut ici éventuellement spécifier une adresse IP unique à laquelle répondra Apache pour un hôte virtuel donné ​(par expour des raisons de sécurité ou de privauté), ou choisir d'​écouter un port exotique
 +| <​file>​ServerAdmin webmaster@localhost</​file>​ | C'est le courriel de l'​administrateur systèmeCette 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. |
  
-<​file>​ +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//​.
- #​interface (local ou internet) connectée ​sur port standard +
- ​Listen X.X.X.X:80+
  
- # toutes les interfaces connectées sur port ssl +<​note ​tip>On remarque donc ici que si on a un seul site à mettre en place, on peut déjà le rendre disponible simplement en le déployant dans le répertoire ///​var/​www/​html//​ : par défaut Apache affichera la page d'​accueil qui doit en principe être écrite dans un fichier //​index.html//​ ou générée par un script //​index.php//​ (voir [[#index]]).</​note>​
- ​Listen 443 +
-</​file>​ +
-<​note ​note>Voir [[:​tutoriel:​securiser_apache2_avec_ssl|securiser_apache2_avec_ssl]]</​note>​ +
-<note important>​ +
-Il faut que les interfaces aient été démarrées avant Apache</​note>​+
  
-==== Fichier de configuration ​====+==== Création d'​hôtes virtuels ​====
  
-[[:tutoriel:​comment_editer_un_fichier|Éditez le fichier]] **/etc/apache2/apache2.conf** afin qu'il ressemble a ceci.\\+<​note>​Pour en savoir plus sur les hôtes virtuels d'​Apache,​ référez-vous à la [[http://​httpd.apache.org/​docs/​current/​mod/​core.html#​virtualhost|documentation officielle]] et à ses [[https://httpd.apache.org/docs/​current/​fr/​vhosts/​examples.html|exemples]].</​note>​
  
-Les explications des différentes lignes sont données dans le fichier de configuration.\\+Une configuration ​courante pour un serveur web mettant à disposition plusieurs sites internet, est d'​avoir plusieurs noms de domaine (ou sous-domaines) pointant sur le serveur, chacun affichant un site différent.\\ 
 +Pour mettre en place cette configuration il faut donc créer un hôte virtuel par nom de domaine ou sous-domaine.
  
-Les directives **<​IfModule !nom.c>​** testent la présence du module afin de s'adapter aux configurations.\\ +Pour faire les choses dans les règles, chaque hôte virtuel doit avoir son fichier ​de configuration dédié. Pour s'y repérer on peut le nommer ​par le nom de domaine auquel il correspond, suivi de l'​extension //.conf//. Pour un nom de domaine //​example.com//​ on créera donc un fichier ///​etc/​apache2/​sites-available/​example.com.conf//​.
-Les autres lignes commençant ​par **#** sont des commentaires\\+
  
 +Voici un exemple de contenu pour ce fichier :
  
-<code apache>​ +<file - example.com.conf><VirtualHost *:80
-# Répertoire Racine du serveur + DocumentRoot "/var/www/example
-ServerRoot "/​etc/​apache2"​ + ServerName example.com 
- + ServerAlias ​www.example.com 
-# Fichier de vérrouillage (lock) du serveur  + <​Directory "/var/www/example">​ 
-# IL DOIT SE TROUVER SUR LE DISQUE LOCAL + Options ​FollowSymLinks 
-#<​IfModule !mpm_winnt.c> + AllowOverride all 
-#<​IfModule !mpm_netware.c> + Require ​all granted
-LockFile /​var/​lock/​apache2/​accept.lock +
-#</IfModule+
-#</​IfModule>​ +
- +
-# Fichier du PID: endroit où, à son démarrage, apache doit stocker +
-# 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 +
-# un message de "Délai d'​attente dépassé"​ (timeout) +
-Timeout 300 +
- +
-# Connexion persistante:​ Alloue ou non les requêtes persistantes +
-# (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. +
-# 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 +
-# d'un même client sur une même connexion avant un timeout +
-KeepAliveTimeout 15 +
- +
-# Configuration du mpm chargé +
-<​IfModule mpm_prefork_module>​ +
-# Nombre de processus serveurs fils à créer au démarrage. +
-   ​StartServers ​         5 +
-# Nombre minimum de processus en attente d'​intercepter des requêtes +
-   ​MinSpareServers ​      5 +
-# Nombre maximum de processus en attente +
-   ​MaxSpareServers ​     15 +
-# 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 vie. Si 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 connections de n'​importe quelle IP (//*//) sur le port 80. | 
 +| <​file>​DocumentRoot "/​var/​www/​example"</​file>​ | On placera les fichiers du site dans le répertoire ///​var/​www/​example//​. | 
 +| <​file>​ServerName example.com</​file>​ | Cet hôte virtuel sera seulement appelé pour le nom de domaine //​example.com//​... | 
 +| <​file>​ServerAlias <​nowiki>​www.example.com</​nowiki></​file>​ | ...ainsi que pour le sous-domaine //<​nowiki>​www.example.com</​nowiki>//​. On peut spécifier ici d'autres noms de domaine en les séparant par un espace. On peut aussi utiliser //​*.example.com//​ pour inclure tous les sous-domaines. | 
 +<file><​Directory "/​var/​www/​example"></​file>​ | On spécifie dans cette section des règles pour le répertoire ///​var/​www/​example//​ sous cet hôte virtuel
 +| <file>Options FollowSymLinks</​file>​ | Apache suivra les liens symboliques qu'il trouvera dans ce répertoire (et ses descendants). | 
 +| <​file>​AllowOverride all</​file>​ | On pourra inclure une configuration personnalisée via un fichier [[#​.htaccess]]. | 
 +| <​file>​Require all granted</​file>​ | Tous les visiteurs pourront accéder au contenu de ce répertoire. Voir la [[https://​httpd.apache.org/​docs/​current/​fr/​mod/​mod_authz_core.html#​require|documentation officielle]] pour modifier ce comportement. | 
 +| <​file>​ErrorLog /​var/​log/​apache2/​error.example.com.log 
 +CustomLog /​var/​log/​apache2/​access.example.com.log combined</​file>​ | Il est important d'​avoir des logs séparés pour chaque hôte virtuel, afin de ne pas mélanger toutes les informations. |
  
-    IndexOptions FancyIndexing VersionSort HTMLTable NameWidth=*+<note tip>On peut exploiter cette fonctionnalité par nom de domaine même sans avoir de nom de domaine enregistré chez un registrar : il suffit de résoudre l'IP de n'​importe quel domaine dans le fichier ///​etc/​hosts//​ du côté client : 
 +<file - hosts>​127.0.0.1 example</​file>​ 
 +Avec la directive //​ServerName example//, l'​hôte virtuel sera accessible à l'​adresse [[http://​example/​]].
  
-    AddIconByEncoding (CMP,/icons/​compressed.gif) x-compress x-gzip+Cela peut être très pratique lorsqu'​on développe de nombreux projets sur une machine ou un réseau localpar exemple.<​/note> 
 +===== HTTPS =====
  
-    AddIconByType ​(TXT,/​icons/​text.gif) text/* +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 passesen particulier lorsqu'​on se connecte depuis un réseau publicou empêche un autre serveur de se faire passer pour le vôtre.
-    AddIconByType ​(IMG,/​icons/​image2.gifimage/* +
-    AddIconByType ​(SND,/​icons/​sound2.gifaudio/* +
-    AddIconByType (VID,/​icons/​movie.gif) video/*+
  
-    AddIcon /​icons/​binary.gif .bin .exe +Il n'est ni nécessaire,​ ni faisable de mettre en place HTTPS avec un certificat valide sur un serveur de développement local.
-    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 .+Pour rendre disponible les sites de manière sécurisée via HTTPS avec des certificats valides, la solution la plus simple est d'​utiliser l'​outil **[[https://certbot.eff.org/|Cerbot]]** de [[https://​letsencrypt.org/​|Let'​s Encrypt]]
-    AddIcon ​/icons/hand.right.gif README +<​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>
-    ​AddIcon /​icons/​folder.gif ^^DIRECTORY^^ +
-    AddIcon ​/icons/​blank.gif ^^BLANKICON^^+
  
-  +==== Activation du module SSL ====
-    DefaultIcon /​icons/​unknown.gif+
  
-    ReadmeName README.html +Pour que le **protocole TLS** (successeur du **SSL**) puisse fonctionner avec Apache2, il faut activer le module //ssl// avec la commande : 
-    ​HeaderName HEADER.html+<​code>​sudo a2enmod ssl</​code>​ 
 +puis recharger la configuration d'​Apache 2 : 
 +<​code>​sudo systemctl reload apache2</​code>​
  
-    IndexIgnore .??* *~ *# RCS CVS *,v *,t  +==== Mise en place de HTTPS avec Certbot ====
-</​IfModule>​+
  
-# Type langages +Prérequis :  
-<​IfModule mod_mime.c> +  * avoir un ou plusieurs noms de domaine enregistrés,​ pointant sur le serveur depuis plus de 48 heures
-    ​AddType application/​x-compress ​.+  * avoir un serveur web apache déjà configuré, fonctionnel et accessible publiquement.
-    AddType application/​x-gzip .gz .tgz+
  
-    AddLanguage ca .ca +<​note>​Les instructions pour installer et utiliser simplement certbot sont disponibles ​en anglais [[https://​certbot.eff.org/​docs/​|sur le site officiel]]En voici un récapitulatif.</note>
-    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) +=== Installation ​de Certbot ===
-<​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+Il faut d'​abord [[:​ppa#​ajout_d_un_ppa_a_vos_sources_logicielles|installer le dépôt PPA]] officiel, puis installer le paquet //certbot// :
  
-</IfModule>+<code>​sudo apt install software-properties-common 
 +sudo add-apt-repository ppa:certbot/certbot 
 +sudo apt update 
 +sudo apt install certbot</​code>
  
-# Type d'​encodage ​de caractères  +=== Utilisation ​de Certbot ===
-<​IfModule mod_mime.c>​ +
-    AddCharset us-ascii ​   .ascii .us-ascii +
-    AddCharset ISO-8859-1 ​ .iso8859-1 ​ .latin1 +
-    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 client, mostly): +
-    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-2 +
-    AddCharset iso-10646-ucs-4 .ucs-4 .iso-10646-ucs-4 +
-    AddCharset shift_jis ​  ​.shift_jis .sjis+
  
-    AddHandler type-map var+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>​
  
-    AddType text/​html ​.shtml +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 pasPour des raisons de sécurité, c'est généralement une très bonne idée de forcer HTTPS.
-    AddOutputFilter INCLUDES ​.shtml +
-</​IfModule>​+
  
-<​IfModule mod_setenvif.c>    +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.
-    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.0 +
-    BrowserMatch "​JDK/​1\.0"​ force-response-1.0+
  
-    BrowserMatch "​Microsoft Data Access Internet Publishing Provider"​ redirect-carefully +<​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>
-    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 +=== Renouvellement automatique ===
-<​IfModule mod_status.c>​ +
-    <​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 +Pour information ​c'est la commande ​//certbot renew// qui permet de renouveler les certificats très simplementmais Certbot créé automatiquement une [[:​cron|tâche cron]] à cet effet dans ///etc/cron.d/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>​+Le script est lancé automatiquement toutes les 12 heures, mais les certificats ne seront renouvelés que si nécessaire. En principe il n'y a donc rien à faire. 
 +===== .htaccess ​ =====
  
-==== sites-available ====+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.)
  
-Ce fichier ​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,\\ +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-repertoiresetc.).
-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 virtuel voir [[:​tutoriel:​virtualhosts_avec_apache2|virtualhosts_avec_apache2]]</​note>​ +
-[[:​tutoriel:​comment_editer_un_fichier|Éditez le fichier]] **/​etc/​apache2/​sites-available/​default** (le seul vhost existant pour le moment).+
  
-<code apache>​ +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 compteou pas, pour ce répertoire et ses descendants. Elle peut prendre la valeur //All// ou //None//.
-# 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 Vhoston 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>+<note tip>​Ces ​fichiers ​sont très pratiques ​pour redéfinir des paramètres ​sur un serveur ​mutualisé ​à l'administration duquel on n'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>
-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 IPs sur lesquelles apache écoute. +
-<​VirtualHost domain.tld:​80>​ +
-# ServerName définie le nom utilisé pour le vhost. Mettez le nom de l'​hôte du domaine +
-ServerName www.domain.tld +
-# ServerAlias définie 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 precis  +
- RedirectMatch ^/$ /index.php +
- </Directory>+
  
- ErrorLog /​var/​log/​apache2/​error.domain.tld.log +===== Index  =====
- CustomLog /​var/​log/​apache2/​access.domain.tld.log combined +
-</​VirtualHost>​+
  
-</​code>​+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.
  
-Enregistrez les changements sous un autre nom (exnomduvhost).+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//.
  
-Supprimer ​l'ancien lien symbolique ​de la configuration d'origine+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.
  
-<code>sudo a2dissite default</code>+<note>Toutes ces directives peuvent être définies dans une section //​[[#​hotes_virtuels|<​Directory>​]]//​ ou dans un fichier //​[[#​.htaccess]]//​.</note>
  
-Il faut maintenant **activer le vhost**. Pour cela il faut créer un **lien symbolique** du fichier **de sites-available/​ vers sites-enabled/​**.\\ +===== Modules ​ =====
-En utilisant:+
  
-<​code>​sudo a2ensite nomduvhost<​/code>+Il est possible d'​ajouter des modules à Apache afin d'​étendre les fonctionnalités du serveur web.\\ 
 +Les modules disponibles sont répertoriés ici : ///​etc/​apache2/​mods-available/​/
  
-<note note> +==== mod_php ====
-**a2dissite** : Apache2 Disable Site\\ +
-**a2ensite** : Apache2 Enable Site +
-</​note>​  +
-Cette méthode du lien symbolique permet de réaliser rapidement des changements dans la configuration d'​apache.+
  
-[[:tutoriel:​comment_editer_un_fichier|Éditez le fichier]] **/​etc/​hosts** ​et modifier la ligne avec nomduvhost le ServerName que vous avez choisi:+[[:PHP]] est un langage de programmation ​et un interpréteur qui permet principalement de générer du contenu HTML. C'est donc une solution très largement utilisée pour créer des applications web ou des [[wpfr>​Page_web_dynamique|sites internet dynamiques]].
  
-<​file>​127.0.0.1 localhost nomduvhost</​file>​+Il est très couramment utilisé en conjonction d'​ApacheVoir [[:LAMP]].
  
-Cela permettra à votre système de faire la correspondance entre le nom de l'hôte et votre machine locale.+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.
  
-Notez que sous debian/​ubuntu 2 les pages a utiliser ​comme index sont spécifiées dans le module dir (mods-available/dir.conf).+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 oeuvreNous ne traiterons pas de ce cas ici.
  
-== Activer les scripts CGI ====+Pour installer et activer //mod_php// sous ubuntu, on utilise cette commande : 
 +<​code>​sudo apt install libapache2-mod-php</​code>​
  
-Pour ce fairerien de plus simple, ajoutez les lignes suivantes ​à votre "​apache2.conf" :+Mais encore une foismieux vaut vous reporter à la documentation ​de [[:​LAMP]] ​à ce sujet.
  
-<​code>​ScriptAlias /cgi-bin/ /​var/​www/​votre_site/​cgi-bin/​ +==== mod_rewrite ​====
- <​Directory /​var/​www/​votre_site/​cgi-bin/>​ +
- Options ExecCGI +
- AddHandler cgi-script cgi pl py +
- </​Directory>​ +
-</​code>​ +
-==== Sécuriser Apache  ​====+
  
-  ​ ​[[:​tutoriel/​securiser_apache2|Sécuriser Apache2]] +**//[[https://httpd.apache.org/docs/current/​fr/​mod/​mod_rewrite.html|mod_rewrite]]//** permet de réécrire des [[wpfr>​Uniform_Resource_Locator|URL]].
-  ​ ​[[tutoriel/securiser_apache2_avec_ssl|Sécuriser Apache2 avec SSL]] +
-  *  Voir la documentation ​[[http://www.cgsecurity.org/Articles/apache.html]]+
  
-=== Sécurité des pages === +Il s'agit généralement ​de remplacer ​le chemin, le nom de la pageet 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.
- ​Afin ​de modifier les pages nous allons créer un utilisateur **webadmin** ​le seul à pouvoir en créeren supprimer et en modifier.\\ +
- En faisant de webadmin ​le propriétaire et de www-data le groupetous 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:​__ +De nombreux services on recour à cette pratique afin d'augmenter leur référencement et de clarifier leur contenu.\\ 
-<​code>​sudo adduser webadmin</​code>​ +Ces services utilisent parfois une terminologie exotique pour mentionner cette pratique ​[[:​WordPress]] parle par ex. de //permalinks//.\\ 
-__Modification des propriétaires ​de tous les fichiers et dossiers du répertoire :__ +On peut aussi s'en servir ​pour déployer une [[https://fr.wikipedia.org/wiki/Interface_de_programmation|API]] web propre.\
-<​code>​sudo chown -Rf webadmin:www-data ​/var/www</code> +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.
-__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 === +Pour activer ce module ​on utilisera ​la commande
-__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. +
- +
-__Le serveur est :__\\ +
-  * connecté directement à internet : +
-<​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 : +
- +
-Le mode **forwarding** et les règles **NAT** doivent être activées.  +
- +
-<​code>​ +
-ext_if="​eth0"​ +
-srv_www_ip_local="​SRV.local.IP.address"​ +
- +
-iptables –I PREROUTING –t nat –p tcp –i $ext_if –s -–dport 80 –j DNAT –to $srv_www_ip_local:​80 +
-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>​ +
- +
- +
- +
- +
-===== 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]],​ [[https://​launchpad.net/​rapache|rapache]] et [[http://​doc.ubuntu-fr.org/​webmin|webmin]].  +
- +
-==== 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/​httpd.conf** +
- +
-Par défaut ce fichier est vide, il faut donc ajouter la ligne suivante: +
- +
-<​code>​ServerName localhost</​code>​ +
- +
-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.\\ +
- +
-Si il y a des messages d'​erreurs regarder les fichiers suivant:​\\ +
-<​code>​ +
-tail /​var/​log/​syslog +
-tail /​var/​log/​apache2/​access.log +
-tail /​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 +
- +
-<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. +
- +
-<​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 :  +
-==== Activer l'url rewriting ==== +
- +
-Chargez le module rewrite :+
 <​code>​sudo a2enmod rewrite</​code>​ <​code>​sudo a2enmod rewrite</​code>​
  
-Ensuite, deux possibilités s'offrent à vous suivant vos capacités de gestion ​de votre serveur : +<​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 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é : [[:apache2#​activer_les_fichiers_.htaccess ​Activer les fichiers ​.htaccess]] +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>​
-  * **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-c'est la page www.votre_domaine.net/​page.php?​id=qui s'​affiche +# Lorsque l'on tape dans la barre d'​adresse www.example.com/page-c'est la page www.example.com/​page.php?​id=qui s'​affiche 
-# [L]=[last] signifie que si cette régle ​s'​applique on n'en cherche pas d'​autre +# ^ et $ dans le bloc modèle signifient respectivement le début et la fin d'une ligne. 
-RewriteRule ^page-1$ /​page.php?​id=1 [L]+# $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 
 +RewriteRule ^page-([0-9]+)$ /​page.php?​id=$1 [L]</​file>​
  
-</code>+<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>
  
-Encore mieux avec les expressions régulières : +==== mod_proxy====
  
-<​code>​ +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.
-Options +FollowSymlinks +
-RewriteEngine on+
  
-# 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 +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.
-# ^ 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>+<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.\\ 
 +N'​activez ce module que si vous êtes certain de ce que vous faites.
  
-====Mod_bw - Limiter ​la bande passante====+Voir [[https://​httpd.apache.org/​docs/​current/​fr/​mod/​mod_proxy.html#​access|la documentation officielle à ce sujet]].</​note>​
  
-Il existe un module ​compatible avec apache2 ​permettant de limiter la bande passante.+Pour activer ce module ​
 +<​code>​sudo a2enmod proxy 
 +sudo systemctl reload ​apache2</​code>​
  
-**Installation du module :**  +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 : 
-[[apt>libapache2-mod-bw]]+<file><​Location /emby> 
 + ProxyPass http://​localhost:​8096/​ 
 + ProxyPassReverse http://​localhost:​8096/​ 
 + Require all granted 
 + SetEnv proxy-nokeepalive 1 
 + SetEnv proxy-sendchunked 1 
 +</​Location></​file>​ 
 +==== mod_userdir ====
  
-**Charger le module ​bandwidth ​:**  +<​note>​Ce ​module ​est également documenté sur [[:xampp#​modifier_le_dossier_racine_du_serveur_apache|la page xampp]].</​note>​
-   sudo a2enmod bw+
  
-**Configuration du module ​:**+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>//​.
  
-Pour cela il faut ajouter quelques lignes ​dans les Vhost de vos domaines ​:+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>​
  
-   ​cd ​/etc/apache2/sites-enabled+On active ensuite le module ​//mod_userdir//​ : 
 +<​code>​sudo a2enmod userdir 
 +sudo systemctl reload ​apache2</code>
  
-   sudo vim votredomaine.tls.conf+Le message //Mon site personnel// devrait alors être lisible à l'​adresse http://​localhost/​~nom_de_lutilisateur
  
-Juste avant //</​VirtualHost>//,​ ajouter :+==== mod_headers ====
  
-  * Limiter tous les utilisateurs ​à 10Kb/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 web. Voici quelques en-têtes qui peuvent être ajoutées à cette fin.
-   ​ForceBandWidthModule On +
-   ​Bandwidth all 10240+
  
-  * Limiter tous les utilisateurs à 50Kb/pour les fichiers supérieurs à 8000Kb ​:+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 :
  
-   ​BandwidthModule On +<file - headers.conf>​ 
-   ForceBandWidthModule On +# Cet en-tête empêche MSIE d'​interpréter des fichiers comme quelque chose 
-   LargeFileLimit * 8000 50000+# 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"​
  
-  * Limiter ​les fichiers ​.avi et .mpg à 20Kb/​s ​:+# 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 portection 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"​
  
-   ​BandwidthModule On +# Cet en-tête oblige les navigateurs à utiliser la protection XSS même s'il l'ont désactivé 
-   ForceBandWidthModule On +# 
-   LargeFileLimit .avi 20000 +Header set X-XSS-Protection "1; mode=block"​
-   ​LargeFileLimit .mpg 1 20000+
  
-**Redémarrer Apache2** +# 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 /​etc/​init.d/​apache2 restart +
- +Header ​always unset "X-Powered-By"
-====Mod_deflate ​Compression gzip==== +
- +
-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,...)+
- +
-**Activation des modules deflate et headers: **  +
- +
-   sudo a2enmod headers +
-   sudo a2enmod deflate +
- +
-**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 apparait : +
- +
-apache2: Could not reliably determine the server'​s fully qualified domain name, using 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 pour xampp ici http://​doc.ubuntu-fr.org/​xampp#​modifier_le_dossier_racine_du_serveur_apache mais je préfère le mettre dans apache. +
- +
-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 +
- +
-Pour cela, le module userdir est fait pour vous. +
- +
-Activer le module userdir +
-  sudo a2enmod userdir +
-Le fichier suivant contient sa configuration ''/​etc/​apache2/​mods-available/​userdir.conf''​ +
- +
-Son contenu est le suivant : +
-<​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>​ +
-                        Order allow,​deny +
-                        Allow from all +
-                </​Limit>​ +
-                <​LimitExcept GET POST OPTIONS>​ +
-                        Order deny,​allow +
-                        Deny from all +
-                </​LimitExcept>​ +
-        </​Directory>​ +
-</​IfModule>​+
 </​file>​ </​file>​
  
-<​note>​La directive UserDir désigne le nom du dossier qui est contenu dans le dossier personnel de l'​utilisateur si une url du type ~utilisateur est reçue. ​Vous pouvez ​donc la changer si vous voulez que ça soit autre chose que la valeur par défaut.</note>+Vous pouvez ​ensuite activer le module : 
 +<​code>​sudo a2enmod headers</codeet recharger la configuration d'​Apache.
  
-Redémarrer apache+Les en-têtes peuvent également être définies au niveau de chaque site dans les fichiers d'​hôte virtuels.
  
-Créer un dossier nommé public_html dans votre home et essayerça devrait marcher ​:)+Si vous utilisez HTTPSvous voudrez certainement définir l'​en-tête [[wpfr>​HTTP_Strict_Transport_Security|Strict-Transport-Security]],​ exemple : 
 +<​file><​VirtualHost *:443> 
 + … 
 + Header always set Strict-Transport-Security"​max-age=31536000;​includeSubDomains;​preload"​ 
 +</​VirtualHost></​file>​
  
-<note warning> Sur Ubuntu 11.04, les droits d'​accès au répertoire ​/home/user sont insuffisantsVous risquez d'​avoir une erreur 403 "​permission denied"​SI le user est johnfaire la manip suivante ​:+Enfintoujours dans un objectif de sécurité, vous pourrez être amené à utiliser ​les en-têtes [[https://developer.mozilla.org/​en-US/​docs/​Web/​HTTP/​CSP|Content-Security-Policy]]exemple ​:
  
-  chgrp www-data /​home/​john/​ +<​file>​Header always set Content-Security-Policy:​ "​default-src '​self';​ img-src *; media-src media1.com media2.com; script-src userscripts.example.com"​</file>
-  chmod 750 /​home/​john/​ +
-   +
-</note>+
  
-<note warning>​Sur Ubuntu 10.04 (Lucid) et 11.04 l'​exécution ​en php est désactivée ​par défaut avec ce module. Pour changer ça et éviter que le navigateur télécharge le code php directement,​ éditer le fichier ''/​etc/​apache2/​mods-enabled/​php5.conf''​ et commentez les lignes ​comme ci dessous ​+Pour voir les en-têtes envoyées ​par votre serveur vous pouvez utiliser des outils en ligne de commande ​comme : 
-<file> +<code>curl -I https://example.com</codeou une extension du navigateur web qui permet d'​afficher les en-têtes HTTP.
-[..] +
-#    <​IfModule mod_userdir.c>​ +
-#        <​Directory ​/home/*/​public_html>​ +
-#            php_admin_value engine Off +
-#        ​</Directory> +
-#    </​IfModule>​ +
-[..] +
-</​file>​ +
-</​note>​+
  
-==== mod_proxy ou comment rediriger certains domaines vers certaines machines ​====+==== Modsecurity ​====
  
-Mon problème était le suivant :+Il s'agit d'un pare-feu pour Apache.
  
-**routeur ​:** +Une [[:modsecurity|page de la documentation]] est consacrée à ce module.
-  * renvoi du port 80 sur la machine 192.168.0.10+
  
-**machine 192.168.0.10 :** +===== Sécurité ​ =====
-  * 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 :** +<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 InternetUne des premières règles de sécurité pour Apache est donc de forcer l'​utilisation de [[#HTTPS]].</note>
-  * 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....+==== Permissions ====
  
-Doncil faut appeller mod_proxy ​à la rescousse.+Par défaut sur UbuntuApache est exécuté par l'​utilisateur //​www-data//,​ qui appartient au groupe //​www-data//​. Il prend donc les permissions de cet utilisateur.\\ 
 +Quand Apache créé un fichier sur l'​espace disque (via par exemple un [[#​mod_php|script PHP]]), celui-ci appartient par défaut ​à l'​utilisateur //​www-data//​ et au groupe //​www-data//​. De la même manière, le serveur ne peut accéder qu'au contenu accessible par //​www-data//​.
  
-sur 192.168.0.10 : +Pour des raisons de sécurité il est recommandé de modifier le propriétaire des fichiers auxquels peut accéder Apache.\\ 
-activer ​le module proxy avec +Le propriétaire devrait être l'​utilisateur qui va maintenir ​le contenu localement, mais le groupe propriétaire devrait rester //​www-data// ​
-  ​a2enmod proxy +<​code>​sudo chown $USER:​www-data ​/var/www/example ​-R</code>
-créer un virtualhost ​/etc/apache2/sites-available/tata.mondomaine.com qui contient :+
  
-  <​VirtualHost 192.168.0.10:80> +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.
-          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 ​+On attribue donc les [[:droits]] 750 (rwx r-x ---) pour les répertoires,​ et 640 (rw- r-- ---) pour les fichiers : 
-  sudo a2ensite tata.mondomaine.com+<​code>​sudo find /​var/​www/​example -type d -exec chmod 750 {} \; 
 +sudo find /​var/​www/​example -type f -exec chmod 640 {} \;</​code>​
  
-Redémarrer apache+Si Apache doit pouvoir modifier du contenu (pour un répertoire d'​upload par exemple), on ne modifie que la permission concernant le groupe (le second numéro), donc 770 (rwx rwx ---) pour les répertoires et 660 (rw- rw- ---) pour les fichiers : 
 +<​code>​sudo find /​var/​www/​example/​upload -type d -exec chmod 770 {} \; 
 +sudo find /​var/​www/​example/​upload -type f -exec chmod 660 {} \;</​code>​
  
-Et c'est tout :)+==== Fail2ban ====
  
-Si ca veut pas, activer aussi les modules proxy_http et proxy_connect+Pour contrer ​les attaques par force brute sur un système d'​authentification d'une application web, il est vivement recommandé d'​utiliser l'​application [[:​Fail2ban]].
  
-bien sûr on peut rajouter dans /​etc/​hosts:​ +===== Problèmes courants =====
-  192.168.0.11 tata.mondomaine.com+
  
-comme çadans ProxyPass et ProxyPassReverse on peut utiliser ​les noms de domaine à la place des adresses+<note tip>En cas d'​erreur du serveurconsultez avant tout les rapports d'​erreurs dans le répertoire ///​var/​log/​apache2//​.
  
-et comme c'est un proxy, beaucoup ​d'autres options sont envisageables mais je n'irai pas plus loin pour aujourd'​hui.+Pour afficher les dernières 40 lignes du journal ​d'erreur par défaut : 
 +<​code>​sudo tail /​var/​log/​apache2/​error.log -40</​code></​note>​
  
-===== Optimiser votre serveur apache2 =====+==== Page blanche ​====
  
-Il est possible ​d'optimiser votre serveur apache.+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é.
  
-====Accélérateurs PHP====+Vous pouvez l'​activer en suivant [[php#​activer_le_rapport_d_erreur|cette documentation]].
  
-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. 
  
-__**Voici un comparatif de ce qui existe actuellement :**__+==== Erreur 403 ====
  
-[[http://​dotclear.placeoweb.com/​post/​PHP-accelerator-cache]]+Une erreur 403 indique un problème d'​autorisation.
  
-=== XCache ===+  * 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]].
  
-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.+==== Erreur 404 ====
  
-[[:xcache]]+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 disque, relatif à la directive //​[[#​hotes_virtuels|DocumentRoot]]//,​ doit correspondre au [[:web#​url|chemin de l'​URL]] appelée. 
 +  * L'​erreur peut aussi être dû à une mauvaise [[#​mod_rewrite|réécriture d'URL]].
  
-=== eAccelerator ​===+==== Erreur 500 ====
  
-[[:​eaccelerator]]+Il s'agit d'une erreur fatale du serveur, qui peut être par exemple liée à une erreur de syntaxe dans un fichier ​[[#.htaccess]].
  
 +Consultez le log d'​erreur de votre hôte virtuel pour en savoir plus.
  
-===== Désinstallation =====+==== Fichiers introuvables dans /​javascript ​====
  
-Pour supprimer cette application,​ il suffit ​de :\\ +Cela peut venir du fait que le paquet **//​javascript-common//​** créé un alias global ​de ///​javascript//​ vers ///​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.)\\+<​file ​/​etc/​apache2/​conf-available/​javascript-common.conf>​Alias /javascript /​usr/​share/​javascript/​
  
 +<​Directory "/​usr/​share/​javascript/">​
 +        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 virtuel, par 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]] +   * [[tutoriel/securiser_apache2_avec_ssl|Sécuriser Apache 2 avec SSL]] 
-   * [[tutoriel/​securiser_apache2_avec_ssl]] +   * [[:​lamp|installer un serveur LAMP]] 
-   ​* ​(fr) [[http://www.neoflow.fr/​tutoriels.category.51/apache.html|Plusieurs tutoriels sur la configuration d'​Apache]]+   * [[:​docker_lamp|installer un serveur LAMP avec Docker]] 
 +   * [[https://www.it-connect.fr/cours-tutoriels/​administration-systemes/​serveur-web/apache/|Plusieurs tutoriels sur la configuration d'​Apache ​sur IT-Connect]] 
 +   * 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]]. //+// Contributeurs : --- //​[[:​utilisateurs:​bruno|bruno]],​ [[:​utilisateurs:​krodelabestiole]], ​[[:​utilisateurs:​benje]],​ [[:​utilisateurs:​Pepou06]],​ [[:​utilisateurs:​Oxossi]],​ [[:​utilisateurs:​Karting06]], [[:​utilisateurs:​albanmartel]]. //


Le contenu de ce wiki est sous licence : CC BY-SA v3.0