{"id":2246,"date":"2023-01-02T22:22:55","date_gmt":"2023-01-02T21:22:55","guid":{"rendered":"https:\/\/www.webodesign.net\/?p=2246"},"modified":"2023-01-03T23:05:32","modified_gmt":"2023-01-03T22:05:32","slug":"configuration-et-utilisation-des-serveurs-web-apache-et-nginx","status":"publish","type":"post","link":"https:\/\/www.webodesign.net\/?p=2246","title":{"rendered":"1. Pr\u00e9sentation des serveurs Apache et Nginx"},"content":{"rendered":"\n<div class=\"wp-block-uagb-container uagb-block-10c7296f alignfull uagb-is-root-container\"><div class=\"uagb-container-inner-blocks-wrap\">\n<div class=\"wp-block-columns is-layout-flex wp-container-6\">\n<div class=\"wp-block-column is-layout-flow\">\n<div class=\"wp-block-group is-layout-flow\">\n<div class=\"wp-block-group is-layout-flow\" style=\"border-style:none;border-width:0px;border-radius:0px\">\t\t\t\t<div class=\"wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-2  uagb-block-fcf86136     \"\n\t\t\t\t\tdata-scroll= \"1\"\n\t\t\t\t\tdata-offset= \"30\"\n\t\t\t\t\tstyle=\"\"\n\t\t\t\t>\n\t\t\t\t<div class=\"uagb-toc__wrap\">\n\t\t\t\t\t\t<div class=\"uagb-toc__title\">\n\t\t\t\t\t\t\tSommaire\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"uagb-toc__list-wrap\">\n\t\t\t\t\t\t<ol class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#1-pr\u00e9sentation-des-serveurs-apache-et-nginx\" class=\"uagb-toc-link__trigger\">1. Pr\u00e9sentation des serveurs Apache et Nginx<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#11-le-web-son-fonctionnement\" class=\"uagb-toc-link__trigger\">1.1. Le web : son fonctionnement<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#111-principe-du-web\" class=\"uagb-toc-link__trigger\">1.1.1. Principe du Web<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#112-r\u00f4les-dun-serveur-web\" class=\"uagb-toc-link__trigger\">1.1.2. R\u00f4les d\u2019un serveur Web<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#113-le-protocole-http\" class=\"uagb-toc-link__trigger\">1.1.3. Le protocole HTTP<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#a-les-diff\u00e9rentes-normes\" class=\"uagb-toc-link__trigger\">A. Les diff\u00e9rentes normes<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#b-les-m\u00e9thodes-de-requ\u00eate\" class=\"uagb-toc-link__trigger\">B. Les m\u00e9thodes de requ\u00eate<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#c-les-en-t\u00eates-des-clients\" class=\"uagb-toc-link__trigger\">C. Les en-t\u00eates des clients<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#d-les-r\u00e9sultats-renvoy\u00e9s-par-le-serveur-web\" class=\"uagb-toc-link__trigger\">D. Les r\u00e9sultats renvoy\u00e9s par le serveur Web<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#e-r\u00e9sum\u00e9\" class=\"uagb-toc-link__trigger\">E. R\u00e9sum\u00e9<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#f-exemple-de-communication-http\" class=\"uagb-toc-link__trigger\">F. Exemple de communication HTTP\u00a0:<\/a><\/li><\/ul><\/li><\/ul><li class=\"uagb-toc__list\"><a href=\"#12-pr\u00e9sentation-g\u00e9n\u00e9rale-dapache\" class=\"uagb-toc-link__trigger\">1.2. Pr\u00e9sentation g\u00e9n\u00e9rale d\u2019Apache<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#121-principales-caract\u00e9ristiques-dapache\" class=\"uagb-toc-link__trigger\">1.2.1 Principales caract\u00e9ristiques d\u2019Apache<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#122-installation-et-ex\u00e9cution-dapache\" class=\"uagb-toc-link__trigger\">1.2.2 Installation et ex\u00e9cution d\u2019Apache<\/a><\/li><\/ul><li class=\"uagb-toc__list\"><a href=\"#13-pr\u00e9sentation-g\u00e9n\u00e9rale-de-nginx\" class=\"uagb-toc-link__trigger\">1.3. Pr\u00e9sentation g\u00e9n\u00e9rale de Nginx<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#131-principales-caract\u00e9ristiques-de-nginx\" class=\"uagb-toc-link__trigger\">1.3.1. Principales caract\u00e9ristiques de Nginx<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#132-installation-et-ex\u00e9cution-de-nginx\" class=\"uagb-toc-link__trigger\">1.3.2. Installation et ex\u00e9cution de Nginx<\/a><\/li><\/ul><li class=\"uagb-toc__list\"><a href=\"#14-quelques-informations-utiles\" class=\"uagb-toc-link__trigger\">1.4. Quelques informations utiles<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#141-les-ports-dune-machine\" class=\"uagb-toc-link__trigger\">1.4.1. Les ports d\u2019une machine<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#142-les-h\u00f4tes-virtuels\" class=\"uagb-toc-link__trigger\">1.4.2. Les h\u00f4tes virtuels<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#143-prise-en-compte-des-modifications-de-configuration\" class=\"uagb-toc-link__trigger\">1.4.3. Prise en compte des modifications de configuration<\/a><\/ul><\/ul><\/ol>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\n\n\n<div class=\"wp-block-group has-border-color has-vivid-cyan-blue-border-color has-background is-layout-flow\" style=\"border-style:dotted;border-width:2px;border-radius:8px;background-color:#fffdf8;padding-right:7px;padding-bottom:15px;padding-left:7px\">\n<h2 class=\"has-text-color wp-block-heading\" id=\"1-i-pr%C3%A9sentation\" style=\"color:#fffdf8;margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;font-size:1px\">1. Pr\u00e9sentation des serveurs Apache et Nginx<\/h2>\n\n\n\n<div class=\"qubely-block-accordion  qubely-block-d34844\" data-item-toggle=\"true\">\n<div class=\"wp-block-qubely-accordion-item qubely-block-66b84a\"><div class=\"qubely-accordion-item qubely-type-fill qubely-accordion-active\"><div class=\"qubely-accordion-panel qubely-icon-position-right\"><span class=\"qubely-accordion-panel-handler\" role=\"button\"><span class=\"qubely-accordion-panel-handler-label\">1. Pr\u00e9sentation des serveurs Apache et Nginx<\/span><span class=\"qubely-accordion-icon fa fa-plus\"><\/span><\/span><\/div><div class=\"qubely-accordion-body\" style=\"display:block\"><div itemprop=\"text\">\n<div class=\"wp-block-uagb-advanced-heading uagb-block-9781c416\"><h3 class=\"uagb-heading-text\">1.1. Le web : son fonctionnement<\/h3><\/div>\n\n\n\n<h4 class=\"has-vivid-purple-color has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"text-transform:none\"><strong>1.1.1. Principe du Web<\/strong><\/h4>\n\n\n\n<p>Le Web est fond\u00e9 sur l\u2019utilisation de trois composantes principales&nbsp;:<\/p>\n\n\n\n<ul>\n<li>les URI (<em>Uniform Resource Identifier<\/em>), permettant d\u2019identifier une ressource accessible via Internet&nbsp;;<\/li>\n\n\n\n<li>le langage HTML (<em>HyperText Markup Language<\/em>), langage de description de donn\u00e9es&nbsp;;<\/li>\n\n\n\n<li>le protocole HTTP (<em>HyperText Transfer Protocol<\/em>), permettant de formaliser et de normaliser des \u00e9changes entre les clients et les serveurs Web.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"has-vivid-purple-color has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"text-transform:none\"><strong>1.1.2. R\u00f4les d\u2019un serveur Web<\/strong><\/h4>\n\n\n\n<p><strong>R\u00f4le principal<\/strong>&nbsp;: attendre les requ\u00eates des clients sur un port pr\u00e9cis d\u2019une machine donn\u00e9e, afin de leur transmettre des documents. Les \u00e9changes entre client et serveur sont normalis\u00e9s via le protocole HTTP.<\/p>\n\n\n\n<p><strong>R\u00f4les secondaires<\/strong>&nbsp;: donner des m\u00e9ta-informations sur les documents transmis, entretenir des communications avec des applications tierces (base de donn\u00e9es, r\u00e9seau) g\u00e9n\u00e9ralement dans le but de transmettre des documents qui sont g\u00e9n\u00e9r\u00e9s de fa\u00e7on <em>dynamique<\/em>, c\u2019est-\u00e0-dire \u00e0 la demande.<\/p>\n\n\n\n<h4 class=\"has-vivid-purple-color has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"text-transform:none\"><strong>1.1.3. Le protocole HTTP<\/strong><\/h4>\n\n\n\n<p>Avant d\u2019attaquer la configuration des logiciels, attardons-nous un peu sur le protocole de communication qu\u2019ils mettent en \u0153uvre<\/p>\n\n\n\n<h5 class=\"has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"color:#008b58;margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;font-style:italic;font-weight:500;text-transform:none\">A. Les diff\u00e9rentes normes<\/h5>\n\n\n\n<p>Le protocole a peu \u00e9volu\u00e9 depuis sa cr\u00e9ation&nbsp;: seulement 4 normes se sont succ\u00e9d\u00e9es.<\/p>\n\n\n\n<ul>\n<li>La premi\u00e8re version, appel\u00e9e 0.9, \u00e9tait tr\u00e8s simple. Cette norme se contentait de fournir les documents qui \u00e9taient demand\u00e9s.<\/li>\n\n\n\n<li>La norme 0.9 a \u00e9t\u00e9 remplac\u00e9e en mai 1996 par la norme 1.0, clairement d\u00e9finie par la RFC 1945. L\u2019ajout le plus important a \u00e9t\u00e9 l\u2019utilisation d\u2019en-t\u00eates (les m\u00e9ta-informations \u00e9voqu\u00e9es plus haut) d\u00e9crivant le type des donn\u00e9es transmises, indiquant ainsi aux clients la fa\u00e7on de traiter les donn\u00e9es qu\u2019ils re\u00e7oivent.<\/li>\n\n\n\n<li>La norme 1.1, date de juin 1999 et est d\u00e9crite par la RFC 2616 bien que sa premi\u00e8re d\u00e9finition date de 1997, dans la RFC 2068. Les apports de cette norme sont des m\u00e9thodes suppl\u00e9mentaires de communication entre les clients et le serveur, ainsi que le support des h\u00f4tes virtuels (m\u00e9thode permettant \u00e0 un serveur d\u2019accueillir plus d\u2019un nom de domaine. Nous y reviendrons plus tard).<\/li>\n\n\n\n<li>Une nouvelle norme, HTTP\/2 a \u00e9t\u00e9 d\u00e9pos\u00e9e en mai 2015 dans la RFC 7540. Elle est plus une surcouche \u00e0 HTTP\/1.1 qu\u2019une \u00e9volution de celle-ci, contrairement aux pr\u00e9c\u00e9dentes \u00e9volutions. Apache et Nginx permettent son utilisation, respectivement depuis les versions 2.4.17 et 1.9.5.<\/li>\n\n\n\n<li>HTTP\/3, encore \u00e0 l\u2019\u00e9tat de brouillon Internet (donc encore en travail, bien que d\u00e9j\u00e0 utilisable sur certains sites et avec certains navigateurs), est le successeur annonc\u00e9 d\u2019HTTP\/1.1 et HTTP\/2<\/li>\n<\/ul>\n\n\n\n<h5 class=\"has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"color:#008b58;margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;font-style:italic;font-weight:500;text-transform:none\">B. Les m\u00e9thodes de requ\u00eate<\/h5>\n\n\n\n<p>Toutes les requ\u00eates du protocole HTTP, quelle que soit la version utilis\u00e9e, commencent par un en-t\u00eate indiquant la <em>m\u00e9thode<\/em> de requ\u00eate.<\/p>\n\n\n\n<p>L\u2019h\u00e9bergement virtuel est une technique permettant d\u2019h\u00e9berger plusieurs sites Web sur un seul serveur Web. Ces sites sont diff\u00e9renci\u00e9s soit par des noms de domaines diff\u00e9rents, soit par des adresses IP ou des ports diff\u00e9rents.<\/p>\n\n\n\n<p>Cette fonctionnalit\u00e9 est bien entendue support\u00e9e sous Apache, qui a \u00e9t\u00e9 l\u2019un des premiers serveurs Web \u00e0 la mettre en \u0153uvre, et par Nginx.<\/p>\n\n\n\n<p>Plusieurs techniques peuvent \u00eatre utilis\u00e9e pour r\u00e9aliser ces h\u00e9bergements virtuels&nbsp;:<\/p>\n\n\n\n<ul>\n<li><em>Les h\u00f4tes virtuels par adresse IP<\/em>&nbsp;: les requ\u00eates sont alors tri\u00e9es en fonction de l\u2019adresse IP qu\u2019elles utilisent. Chaque h\u00f4te virtuel dispose de sa propre adresse IP et r\u00e9pond alors aux requ\u00eates concernant son adresse.<\/li>\n\n\n\n<li><em>Les h\u00f4tes virtuels par port<\/em>&nbsp;: les requ\u00eates sont alors tri\u00e9es en fonction du port qu\u2019elles utilisent. Chaque h\u00f4te virtuel dispose de son propre port et r\u00e9pond alors aux requ\u00eates concernant son adresse. Cette technique n\u2019est quasiment jamais utilis\u00e9e, car utiliser un port diff\u00e9rent des ports standards (80 et 443) n\u00e9cessite de le sp\u00e9cifier dans l\u2019adresse du site (<code>http:\/\/example.org:8081\/foo\/bar<\/code>, par exemple).<\/li>\n\n\n\n<li><em>Les h\u00f4tes virtuels par nom<\/em>&nbsp;: cette technique repose sur l\u2019\u00e9volution apport\u00e9e par la norme HTTP 1.1, qui pr\u00e9voit d\u2019ajouter un champ \u00ab&nbsp;<code>Host<\/code>&nbsp;\u00bb dans les en-t\u00eates HTTP. Ce champ est alors utilis\u00e9 pour identifier l\u2019h\u00f4te virtuel qui est concern\u00e9 par une requ\u00eate donn\u00e9e.<\/li>\n\n\n\n<li><em>Les h\u00f4tes virtuels dynamiques<\/em>&nbsp;: qui ne poss\u00e8dent pas de configuration propre, mais qui sont d\u00e9termin\u00e9s \u00e0 partir de l\u2019URL de la requ\u00eate. Il est alors possible en utilisant quelques r\u00e8gles de d\u00e9crire le comportement d\u2019un ensemble d\u2019h\u00f4tes virtuels.<\/li>\n<\/ul>\n\n\n\n<p>Ces m\u00e9thodes, au nombre de 9, sont r\u00e9pertori\u00e9es dans le tableau suivant&nbsp;:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><strong>M\u00e9thode<\/strong><\/th><th><strong>Action<\/strong><\/th><\/tr><\/thead><tbody><tr><td><code>GET<\/code><\/td><td>Permet de r\u00e9cup\u00e9rer le document correspondant \u00e0 l\u2019URL joint \u00e0 la requ\u00eate<\/td><\/tr><tr><td><code>HEAD<\/code><\/td><td>Identique \u00e0 la requ\u00eate <code>GET<\/code>, mais le serveur ne renvoie alors que l\u2019en-t\u00eate de la r\u00e9ponse<\/td><\/tr><tr><td><code>POST<\/code><\/td><td>Permet de r\u00e9cup\u00e9rer le document correspondant \u00e0 l\u2019URL joint \u00e0 la requ\u00eate, tout en envoyant des donn\u00e9es qui sont requises par cette URL<\/td><\/tr><tr><td><code>OPTIONS<\/code><\/td><td>Demande les options de communication du serveur, permettant ainsi une n\u00e9gociation pour d\u00e9terminer la communication qui sera la plus adapt\u00e9e<\/td><\/tr><tr><td><code>TRACE<\/code><\/td><td>Demande \u00e0 ce que le message de requ\u00eate revienne au client, ce qui lui permet de voir exactement ce que re\u00e7oit le serveur<\/td><\/tr><tr><td><code>PUT<\/code><\/td><td>Permet d\u2019envoyer un document au serveur, qui sera enregistr\u00e9 dans l\u2019URL pass\u00e9e en param\u00e8tre, ou modifi\u00e9 s\u2019il existe d\u00e9j\u00e0<\/td><\/tr><tr><td><code>PATCH<\/code><\/td><td>Permet d\u2019envoyer des modifications partielles \u00e0 un document<\/td><\/tr><tr><td><code>DELETE<\/code><\/td><td>Demande au serveur de supprimer la ressource identifi\u00e9e dans l\u2019URL de la requ\u00eate<\/td><\/tr><tr><td><code>CONNECT<\/code><\/td><td>Demande \u00e0 un mandataire Web, typiquement un proxy, de tunneliser une connexion du client vers le serveur, plut\u00f4t que de simplement relayer la demande. Peut \u00eatre typiquement utilis\u00e9 pour demander \u00e0 un proxy d\u2019\u00e9tablir une connexion SSL vers un serveur<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Ces diff\u00e9rentes m\u00e9thodes permettent, par exemple, de recevoir des r\u00e9sultats diff\u00e9rents pour une m\u00eame URL.<\/p>\n\n\n\n<h5 class=\"has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"color:#008b58;margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;font-style:italic;font-weight:500;text-transform:none\">C. Les en-t\u00eates des clients<\/h5>\n\n\n\n<p>Une fois la m\u00e9thode de requ\u00eate pr\u00e9cis\u00e9e, les clients peuvent \u00e9galement envoyer des donn\u00e9es au serveur, soit en utilisant des <em>en-t\u00eates<\/em> HTTP si ce sont des informations compl\u00e9mentaires sur la requ\u00eate, soit en utilisant le corps du message si ce sont des documents.<\/p>\n\n\n\n<p>Les informations compl\u00e9mentaires sont envoy\u00e9es gr\u00e2ce \u00e0 une composition des en-t\u00eates pr\u00e9sent\u00e9s dans le tableau suivant (un en-t\u00eate par ligne, liste non exhaustive)&nbsp;:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><strong>En-t\u00eate<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr><\/thead><tbody><tr><td><code>Accept<\/code><\/td><td>Pr\u00e9cise les types MIME accept\u00e9s par le client (voir plus bas))<\/td><\/tr><tr><td><code>Accept-Encoding<\/code><\/td><td>Pr\u00e9cise les encodages de caract\u00e8res accept\u00e9s par le client<\/td><\/tr><tr><td><code>Accept-Language<\/code><\/td><td>Pr\u00e9cise les langues accept\u00e9es par le client<\/td><\/tr><tr><td><code>Host<\/code><\/td><td>Nom de l\u2019h\u00f4te (et \u00e9ventuellement num\u00e9ro de port) concern\u00e9 par la requ\u00eate<\/td><\/tr><tr><td><code>User-Agent<\/code><\/td><td>Informe le serveur sur le client (g\u00e9n\u00e9ralement le navigateur) \u00e0 l\u2019origine de la requ\u00eate<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>L\u2019en-t\u00eate <code>Accept-Language<\/code> va, par exemple, \u00eatre utilis\u00e9 par le serveur web pour rediriger la visiteuse vers la version du site correspondant \u00e0 son langage pr\u00e9f\u00e9r\u00e9, ou pour afficher directement le site dans sa langue.<\/p>\n\n\n\n<p><strong>NB<\/strong>&nbsp;: on peut tout \u00e0 fait envoyer des en-t\u00eates forg\u00e9s ne correspondant \u00e0 rien comme <code>X-Sisterhood-of-Karn<\/code> (on les pr\u00e9fixe g\u00e9n\u00e9ralement avec <code>X<\/code>, mais cela n\u2019a rien d\u2019obligatoire). Normalement, ces en-t\u00eates ne seront pas trait\u00e9s par le serveur ou le web, mais on peut tout \u00e0 fait d\u00e9cider de les utiliser (dans les logs, pour une authentification, etc).<\/p>\n\n\n\n<h5 class=\"has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"color:#008b58;margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;font-style:italic;font-weight:500;text-transform:none\">D. Les r\u00e9sultats renvoy\u00e9s par le serveur Web<\/h5>\n\n\n\n<p>Si la requ\u00eate se conforme \u00e0 HTTP\/0.9, le serveur se contente de renvoyer le document qui a \u00e9t\u00e9 demand\u00e9.<\/p>\n\n\n\n<p>\u00c0 partir de la version 1.0, il renvoie \u00e9galement d\u2019autres informations avant de renvoyer finalement le document demand\u00e9 (si celui-ci peut \u00eatre transmis bien s\u00fbr).<\/p>\n\n\n\n<p>La premi\u00e8re ligne de la r\u00e9ponse indique la version du protocole utilis\u00e9 par le serveur Web, ainsi que la valeur de retour. Cette valeur est en 2 parties&nbsp;: un code et un commentaire, correspondant au libell\u00e9 du code. Ces codes sont rang\u00e9s par cat\u00e9gories, comme le montre le tableau suivant&nbsp;:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><strong>Codes<\/strong><\/th><th><strong>Cat\u00e9gorie de la r\u00e9ponse<\/strong><\/th><\/tr><\/thead><tbody><tr><td>100-199<\/td><td>Information<\/td><\/tr><tr><td>200-299<\/td><td>Succ\u00e8s de la requ\u00eate du client<\/td><\/tr><tr><td>300-399<\/td><td>Redirection de la requ\u00eate du client<\/td><\/tr><tr><td>400-499<\/td><td>Requ\u00eate du client incompl\u00e8te ou non autoris\u00e9e<\/td><\/tr><tr><td>500-599<\/td><td>Erreurs du serveur<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Le code 200 repr\u00e9sente en particulier un succ\u00e8s de la requ\u00eate. Les tranches de code d\u00e9crites comportent environ 60 codes diff\u00e9rents.<\/p>\n\n\n\n<p>La suite des en-t\u00eates renvoy\u00e9s par le serveur est une composition des en-t\u00eates suivants, suivant le type de demande et la configuration du serveur (liste non exhaustive)&nbsp;:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><strong>En-t\u00eate<\/strong><\/th><th><strong>Description<\/strong><\/th><\/tr><\/thead><tbody><tr><td><code>Connection<\/code><\/td><td>Pr\u00e9cise les options de cette connexion r\u00e9seau<\/td><\/tr><tr><td><code>Content-Encoding<\/code><\/td><td>Indique le sch\u00e9ma d\u2019encodage (compression g\u00e9n\u00e9ralement) associ\u00e9e au contenu<\/td><\/tr><tr><td><code>Content-Length<\/code><\/td><td>Taille du corps du message<\/td><\/tr><tr><td><code>Content-Type<\/code><\/td><td>D\u00e9crit le type MIME du contenu (voir plus bas))<\/td><\/tr><tr><td><code>Date<\/code><\/td><td>Date d\u2019\u00e9mission de la r\u00e9ponse<\/td><\/tr><tr><td><code>Expires<\/code><\/td><td>Pr\u00e9cise une date et l\u2019heure apr\u00e8s lesquelles le document fourni sera obsol\u00e8te<\/td><\/tr><tr><td><code>Last-Modified<\/code><\/td><td>Pr\u00e9cise la date et l\u2019heure de la derni\u00e8re modification du document fourni<\/td><\/tr><tr><td><code>Location<\/code><\/td><td>Est associ\u00e9 \u00e0 une URL vers laquelle le client est redirig\u00e9<\/td><\/tr><tr><td><code>Server<\/code><\/td><td>Informations sur le serveur ayant renvoy\u00e9 la requ\u00eate<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Finalement, le document demand\u00e9 est renvoy\u00e9, si cela est possible bien s\u00fbr.<\/p>\n\n\n\n<p><strong>Les types MIME<\/strong><\/p>\n\n\n\n<p>Les types MIME permettent de pr\u00e9ciser le type de documents transmis lors d\u2019une communication.<\/p>\n\n\n\n<p>MIME, signifiant <em>Multipurpose Internet Mail Extensions<\/em>, a tout d\u2019abord \u00e9t\u00e9 con\u00e7u pour d\u00e9crire le type des pi\u00e8ces jointes \u00e0 des mails.<\/p>\n\n\n\n<p>Ces types ont par la suite \u00e9t\u00e9 repris dans HTTP\/1.0 pour que les clients aient connaissance du type de document qui leur est renvoy\u00e9.<\/p>\n\n\n\n<p>Les types MIME sont d\u00e9crits par les RFC 1521 et 1522.<\/p>\n\n\n\n<p>Quelques exemples de types MIME, cat\u00e9gorie par cat\u00e9gorie&nbsp;:<\/p>\n\n\n\n<ul>\n<li>texte&nbsp;: <code>text\/plain<\/code>, <code>text\/html<\/code>, <code>text\/xml<\/code><\/li>\n\n\n\n<li>image&nbsp;: <code>image\/gif<\/code>, <code>image\/jpg<\/code>, <code>image\/png<\/code><\/li>\n\n\n\n<li>audio&nbsp;: <code>audio\/aiff<\/code>, <code>audio\/mp3<\/code>, <code>audio\/basic<\/code><\/li>\n\n\n\n<li>vid\u00e9o&nbsp;: <code>video\/mpeg<\/code>, <code>video\/x-ms-asf<\/code>, <code>video\/mpeg<\/code><\/li>\n\n\n\n<li>application&nbsp;: <code>application\/pdf<\/code>, <code>application\/zip<\/code>, <code>application\/x-latex<\/code><\/li>\n<\/ul>\n\n\n\n<p>C\u2019est ce qui permet \u00e0 votre navigateur d\u2019afficher directement une image ou de vous proposer de t\u00e9l\u00e9charger une archive zip : le navigateur sait interpr\u00eater (afficher) un certain nombre de types de document (donc de types MIME), et vous propose de t\u00e9l\u00e9charger les autres<\/p>\n\n\n\n<h5 class=\"has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"color:#008b58;margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;font-style:italic;font-weight:500;text-transform:none\">E. R\u00e9sum\u00e9<\/h5>\n\n\n\n<p>Un client web va faire une requ\u00eate \u00e0 un serveur web en pr\u00e9cisant la m\u00e9thode (<code>GET<\/code>, <code>POST<\/code>\u2026), l\u2019adresse de la ressource souhait\u00e9e, la version du protocole HTTP utilis\u00e9e si la requ\u00eate est en HTTP\/1.0 ou ult\u00e9rieure et \u00e9ventuellement des en-t\u00eates relatifs au client (<code>User-Agent<\/code>, par exemple) ou au site voulu (<code>Host<\/code>).<\/p>\n\n\n\n<p>Le serveur web va r\u00e9pondre avec le document dans le cas du protocole HTTP\/0.9, pr\u00e9c\u00e9d\u00e9 de la version du protocole HTTP, un code de retour, un commentaire et \u00e9ventuellement des en-t\u00eates dans les versions ult\u00e9rieures du protocole.<\/p>\n\n\n\n<h5 class=\"has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"color:#008b58;margin-top:0;margin-right:0;margin-bottom:0;margin-left:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0;font-style:italic;font-weight:500;text-transform:none\">F. Exemple de communication HTTP&nbsp;:<\/h5>\n\n\n\n<p>M\u00e9thode <code>GET<\/code>, protocole HTTP\/0.9, ressource <code>\/<\/code>&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;no&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">GET \/<\/pre><\/div>\n\n\n\n<p>La r\u00e9ponse sera semblable \u00e0&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;no&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;en&quot;&gt;\n    \u2026\n&lt;\/html&gt;<\/pre><\/div>\n\n\n\n<p>M\u00e9thode GET, protocole HTTP\/1.1, ressource \/, en-t\u00eate Host&nbsp;:La r\u00e9ponse sera semblable \u00e0&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;no&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">GET \/ HTTP\/1.1\nhost: example.org<\/pre><\/div>\n\n\n\n<p>La r\u00e9ponse sera semblable \u00e0&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;no&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">HTTP\/1.1 200 OK\nServer: nginx\/1.18.0\nDate: Mon, 08 Nov 2021 20:41:46 GMT\nContent-Type: text\/html\nContent-Length: 35420\nLast-Modified: Mon, 08 Nov 2021 11:00:04 GMT\nConnection: keep-alive\nETag: &quot;61890334-8a5c&quot;\nAccept-Ranges: bytes\n\n&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;en&quot;&gt;\n    \u2026\n&lt;\/html&gt;<\/pre><\/div>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-7a35e051\"><h3 class=\"uagb-heading-text\">1.2. Pr\u00e9sentation g\u00e9n\u00e9rale d\u2019Apache<\/h3><\/div>\n\n\n\n<p>Apache est actuellement second des serveurs Web, derri\u00e8re Nginx, avec un d\u00e9ploiement d\u2019un peu moins d\u2019un quart de ce type de serveurs.<\/p>\n\n\n\n<h4 class=\"has-vivid-purple-color has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"text-transform:none\"><strong>1.2.1 Principales caract\u00e9ristiques d\u2019Apache<\/strong><\/h4>\n\n\n\n<p>Les caract\u00e9ristiques suivantes sont le minimum qu\u2019on attend de nos jours d\u2019un serveur web&nbsp;:<\/p>\n\n\n\n<ul>\n<li>Conformit\u00e9 aux standards&nbsp;: Apache est compl\u00e8tement conforme \u00e0 la norme HTTP\/1.1 (le support d\u2019HTTP\/2 est apport\u00e9 par le module <code>http2<\/code>)&nbsp;;<\/li>\n\n\n\n<li>H\u00e9bergement virtuel&nbsp;: Apache est capable de g\u00e9rer plusieurs sites Web (relatifs \u00e0 plusieurs domaines distincts) sur une m\u00eame machine&nbsp;;<\/li>\n\n\n\n<li>S\u00e9curit\u00e9&nbsp;: par la prise en compte de protocoles de s\u00e9curit\u00e9 tels que SSL\/TLS.<\/li>\n<\/ul>\n\n\n\n<p>Ces caract\u00e9ristiques sont facultatives pour servir des sites web mais appr\u00e9ciables&nbsp;:<\/p>\n\n\n\n<ul>\n<li>Objets dynamiques partag\u00e9s&nbsp;: Apache peut charger des modules d\u2019extension de ses fonctionnalit\u00e9s en cours d\u2019ex\u00e9cution et ces modules peuvent \u00eatre int\u00e9gr\u00e9s sous Apache sans avoir \u00e0 le recompiler&nbsp;;<\/li>\n\n\n\n<li>Personnalisation et extensibilit\u00e9&nbsp;: Apache peut \u00eatre \u00e9tendu par des modules programm\u00e9 en C ou en Perl utilisant l\u2019API Apache, ce qui permet d\u2019\u00e9tendre ses fonctionnalit\u00e9s pour un besoin particulier&nbsp;;<\/li>\n\n\n\n<li>La communaut\u00e9 du libre et en particulier celle de l\u2019<em>Apache Software Foundation<\/em>.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"has-vivid-purple-color has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"text-transform:none\"><strong>1.2.2 Installation et ex\u00e9cution d\u2019Apache<\/strong><\/h4>\n\n\n\n<p>Plusieurs solutions existent pour installer Apache&nbsp;:<\/p>\n\n\n\n<ul>\n<li>l\u2019installer \u00e0 partir de ses sources, ce qui permet d\u2019obtenir une version optimis\u00e9e pour une architecture et un besoin particulier&nbsp;;<\/li>\n\n\n\n<li>l\u2019installer \u00e0 partir d\u2019un paquet, d\u00e9pendant de la distribution utilis\u00e9e (ou de la plate-forme). Pour l\u2019installer sur une Debian, par exemple : <code>apt install apache2<\/code>.<\/li>\n<\/ul>\n\n\n\n<p>Le d\u00e9marrage d\u2019Apache correspond \u00e0 l\u2019ex\u00e9cution du programme <code>apache2<\/code>, soit en ligne de commande, soit via un script de d\u00e9marrage ou un service systemd, ce qui est le cas le plus fr\u00e9quent.<\/p>\n\n\n\n<p>Quelques options du programme <code>apache2<\/code> (parmi les nombreuses disponibles) sont tr\u00e8s utiles&nbsp;:<\/p>\n\n\n\n<ul>\n<li><code>-v<\/code>&nbsp;: obtenir la version d\u2019Apache<\/li>\n\n\n\n<li><code>-V<\/code>&nbsp;: identique \u00e0 l\u2019option <code>-v<\/code>, en ajoutant d\u2019autres informations comme les options de compilation utilis\u00e9es ou les r\u00e9pertoires par d\u00e9faut\u2026<\/li>\n\n\n\n<li><code>-l<\/code>&nbsp;: liste des modules compil\u00e9s de fa\u00e7on statique (non d\u00e9sactivables)<\/li>\n\n\n\n<li><code>-M<\/code>&nbsp;: liste des modules charg\u00e9s par Apache<\/li>\n\n\n\n<li><code>-t<\/code>&nbsp;: v\u00e9rifie la syntaxe des fichiers de configuration sans lancer le serveur<\/li>\n\n\n\n<li><code>-f<\/code>&nbsp;: utilise le fichier de configuration pass\u00e9 en param\u00e8tre plut\u00f4t que le fichier de configuration par d\u00e9faut.<\/li>\n<\/ul>\n\n\n\n<p>Le fichier principal de configuration d\u2019Apache s\u2019appelle <code>apache2.conf<\/code> sur Debian et les distributions qui en d\u00e9rivent comme Ubuntu, <code>httpd.conf<\/code> sur Red Hat et les distributions qui en d\u00e9rivent comme CentOs. Il sera souvent modifi\u00e9 dans la suite de ce cours. Nous garderons le nom d\u2019<code>apache2.conf<\/code> tout au long de ce cours.<\/p>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-1eec234e\"><h3 class=\"uagb-heading-text\">1.3. Pr\u00e9sentation g\u00e9n\u00e9rale de Nginx<\/h3><\/div>\n\n\n\n<h4 class=\"has-vivid-purple-color has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"text-transform:none\"><strong>1.3.1. Principales caract\u00e9ristiques de Nginx<\/strong><\/h4>\n\n\n\n<p>En plus des caract\u00e9ristiques minimales pour un serveur web \u00e9voqu\u00e9es plus haut, voici quelques points int\u00e9ressants \u00e0 propos de Nginx&nbsp;:<\/p>\n\n\n\n<ul>\n<li>Pour r\u00e9pondre aux requ\u00eates, Nginx utilise une approche par \u00e9v\u00e8nement, tout comme Apache lorsqu\u2019il utilise le module <code>mpm_event<\/code> (Apache peut avoir une approche par <em>processus<\/em> en utilisant le module <code>mpm_prefork<\/code> ou par <em>processus<\/em> et <em>threads<\/em> avec le module <code>mpm_worker<\/code>). Imaginons qu\u2019on vous demande de faire du caf\u00e9 et tout de suite apr\u00e8s d\u2019aller chercher le courrier&nbsp;: vous pouvez pr\u00e9parer la cafeti\u00e8re, la mettre en marche, attendre devant que le caf\u00e9 soit pr\u00eat et ensuite aller chercher le courrier, ou alors vous pouvez, une fois la cafeti\u00e8re allum\u00e9e, aller chercher le courrier et revenir chercher la cafeti\u00e8re une fois que c\u2019est pr\u00eat. La deuxi\u00e8me approche est celle de Nginx, ce qui lui permet supporter un grand nombre de connections simultan\u00e9es avec une empreinte m\u00e9moire r\u00e9duite.<\/li>\n\n\n\n<li>Avant la <a href=\"http:\/\/nginx.org\/en\/linux_packages.html#dynmodules\">version 1.9.11<\/a> de Nginx, il n\u2019\u00e9tait pas possible d\u2019activer et de d\u00e9sactiver dynamiquement les modules : les diff\u00e9rents modules de Nginx devaient \u00eatre inclus lors de sa compilation. C\u2019est pourquoi il existait plusieurs paquets fournissant Nginx dans Debian (<code>nginx<\/code>, <code>nginx-light<\/code>, <code>nginx-full<\/code> et <code>nginx-extras<\/code>)&nbsp;: chacun d\u2019eux embarquait plus ou moins de modules. Depuis Debian Stretch (sortie en 2017), ces diff\u00e9rents paquets proposent toujours les m\u00eames modules mais ceux-ci sont fournis par des paquets d\u00e9di\u00e9s dont d\u00e9pendent les diff\u00e9rents paquets de Nginx. Certains modules sont toutefois toujours compil\u00e9s statiquement et ne sont pas d\u00e9sactivables.<\/li>\n\n\n\n<li>Support des scripts FastCGI, SCGI, WSGI mais pas CGI (contrairement \u00e0 Apache).<\/li>\n\n\n\n<li>Nginx peut servir de r\u00e9partiteur de charge (<em>load balancer<\/em>).<\/li>\n\n\n\n<li>Son syst\u00e8me de cache est tr\u00e8s appr\u00e9ciable.<\/li>\n\n\n\n<li>Nginx est aussi un excellent proxy inverse ainsi qu\u2019un proxy mail.<\/li>\n<\/ul>\n\n\n\n<p>Il est \u00e0 noter qu\u2019Apache peut faire presque tout ce que Nginx fait (r\u00e9partiteur de charge, cache, FastCGI\u2026) pour peu qu\u2019on installe et active les modules n\u00e9cessaires.<\/p>\n\n\n\n<p>Apache \u00e9tant plus ancien que Nginx (1995 versus 2002) et ayant eu une plus longue histoire de domination du march\u00e9 des serveurs web, celui-ci dispose de bien plus de modules que Nginx, donc de plus de fonctionnalit\u00e9s.<\/p>\n\n\n\n<h4 class=\"has-vivid-purple-color has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"text-transform:none\"><strong>1.3.2. Installation et ex\u00e9cution de Nginx<\/strong><\/h4>\n\n\n\n<p>Plusieurs solutions existent pour installer Nginx&nbsp;:<\/p>\n\n\n\n<ul>\n<li>l\u2019installer \u00e0 partir de ses sources, ce qui permet d\u2019obtenir une version optimis\u00e9e pour une architecture et un besoin particulier&nbsp;;<\/li>\n\n\n\n<li>l\u2019installer \u00e0 partir d\u2019un paquet, d\u00e9pendant de la distribution utilis\u00e9e. Pour l\u2019installer sur une Debian, par exemple : <code>apt install nginx<\/code>.<\/li>\n<\/ul>\n\n\n\n<p>Le d\u00e9marrage de Nginx correspond \u00e0 l\u2019ex\u00e9cution du programme <code>nginx<\/code>, soit en ligne de commande, soit via un script de d\u00e9marrage ou un service systemd, ce qui est le cas le plus fr\u00e9quent.<\/p>\n\n\n\n<p>Quelques options du programme <code>nginx<\/code> sont tr\u00e8s utiles&nbsp;:<\/p>\n\n\n\n<ul>\n<li><code>-v<\/code>&nbsp;: obtenir la version de Nginx.<\/li>\n\n\n\n<li><code>-V<\/code>&nbsp;: identique \u00e0 l\u2019option <code>-v<\/code>, en ajoutant d\u2019autres informations comme les options de compilation utilis\u00e9es. Vous pourrez y voir la liste des modules inclus dans votre version de Nginx.<\/li>\n\n\n\n<li><code>-t<\/code>&nbsp;:v\u00e9rifie la syntaxe des fichiers de configuration<\/li>\n\n\n\n<li><code>-s SIGNAL<\/code>&nbsp;: permet d\u2019envoyer un signal au serveur nginx lanc\u00e9. <code>SIGNAL<\/code> peut \u00eatre&nbsp;:\n<ul>\n<li><code>stop<\/code>&nbsp;: ferme brutalement (sans attendre d\u2019avoir servi les requ\u00eates en cours)<\/li>\n\n\n\n<li><code>quit<\/code>&nbsp;: ferme une fois toutes les requ\u00eates trait\u00e9es<\/li>\n\n\n\n<li><code>reload<\/code>&nbsp;: recharge la configuration<\/li>\n\n\n\n<li><code>reopen<\/code>&nbsp;: rouvre les journaux syst\u00e8mes<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-26ad82a3\"><h3 class=\"uagb-heading-text\">1.4. Quelques informations utiles<\/h3><\/div>\n\n\n\n<h4 class=\"has-vivid-purple-color has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"text-transform:none\"><strong>1.4.1. Les ports d\u2019une machine<\/strong><\/h4>\n\n\n\n<p>Deux services ne peuvent pas \u00e9couter en m\u00eame temps sur la m\u00eame adresse IP et le m\u00eame port d\u2019une machine. Dans leur configuration de base sur Debian (et sur la plupart des distributions), il n\u2019est pas possible de faire tourner Apache <em>et<\/em> Nginx en m\u00eame temps, ceux-ci souhaitant \u00e9couter par d\u00e9faut sur le port 80 de toutes les adresses IP disponibles.<\/p>\n\n\n\n<p>Pour pouvoir tester le contenu de ce cours avec Apache et Nginx, vous pouvez&nbsp;:<\/p>\n\n\n\n<ul>\n<li>couper l\u2019un avant d\u2019allumer l\u2019autre&nbsp;;<\/li>\n\n\n\n<li>les faire tourner dans des machines virtuelles diff\u00e9rentes&nbsp;;<\/li>\n\n\n\n<li>faire \u00e9couter l\u2019un des deux sur un autre port que le port 80 (le port 8080 est g\u00e9n\u00e9ralement un bon choix de port alternatif pour un serveur web).<\/li>\n<\/ul>\n\n\n\n<h4 class=\"has-vivid-purple-color has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"text-transform:none\"><strong>1.4.2. Les h\u00f4tes virtuels<\/strong><\/h4>\n\n\n\n<p>Wikip\u00e9dia offre une tr\u00e8s bonne explication de ce qu\u2019est l\u2019h\u00e9bergement virtuel&nbsp;:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p>En informatique, l\u2019h\u00e9bergement virtuel (de l\u2019anglais <em>virtual hosting<\/em> abr\u00e9g\u00e9 <em>vhost<\/em>) est une m\u00e9thode que les serveurs tels que serveurs Web utilisent pour accueillir plus d\u2019un nom de domaine sur le m\u00eame ordinateur, parfois sur la m\u00eame adresse IP, tout en maintenant une gestion s\u00e9par\u00e9e de chacun de ces noms. Cela permet de partager les ressources du serveur, comme la m\u00e9moire et le processeur, sans n\u00e9cessiter que tous les services fournis utilisent le m\u00eame nom d\u2019h\u00f4te. Le terme h\u00e9bergement virtuel (<em>virtual hosting<\/em>) est utilis\u00e9 habituellement en r\u00e9f\u00e9rence aux serveurs Web, mais les principes s\u2019appliquent \u00e9galement \u00e0 d\u2019autres services internet.<\/p>\n<\/blockquote>\n\n\n\n<p>Dans notre cas, les h\u00f4tes virtuels sont les diff\u00e9rents sites web servis par Apache ou Nginx.<\/p>\n\n\n\n<h4 class=\"has-vivid-purple-color has-text-color has-medium-font-size wp-block-heading\" id=\"principe-du-web\" style=\"text-transform:none\"><strong>1.4.3. Prise en compte des modifications de configuration<\/strong><\/h4>\n\n\n\n<p>Pour prendre en compte des modifications de configuration, on red\u00e9marre le logiciel (ce qui le coupe compl\u00e8tement et le rallume) ou on le recharge (les processus fils ou les <em>threades<\/em> sont coup\u00e9s et rallum\u00e9 mais le processus principal reste actif).<\/p>\n\n\n\n<p>\u00c0 noter&nbsp;: certaines modifications de configuration n\u00e9cessitent obligatoirement un red\u00e9marrage, d\u2019autres ne n\u00e9cessitent qu\u2019un rechargement. On privil\u00e9gie le rechargement lorsque cela est possible afin d\u2019\u00e9viter une p\u00e9riode d\u2019indisponibilit\u00e9 du service.<\/p>\n\n\n\n<p>On doit s\u2019assurer de la validit\u00e9 de la configuration avant de red\u00e9marrer ou recharger les services pour \u00e9viter une coupure du service (une configuration erron\u00e9e fera planter le service au red\u00e9marrage ou au rechargement). Fort heureusement Apache et Nginx permettent de tester la syntaxe de leurs fichiers de configuration. Si cela ne permet pas de s\u2019assurer qu\u2019on aura bien le comportement souhait\u00e9, cela permet de s\u2019assurer que l\u2019on peut red\u00e9marrer ou recharger le service sans que celui-ci ne se mette en carafe.<\/p>\n\n\n\n<p>Pour tester la configuration d\u2019Apache&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;language&quot;:&quot;Shell&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">apachectl -t<\/pre><\/div>\n\n\n\n<p>Pour tester la configuration de Nginx&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;language&quot;:&quot;Shell&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">nginx -t<\/pre><\/div>\n\n\n\n<p>Il est n\u00e9cessaire de prendre d\u00e8s \u00e0 pr\u00e9sent l\u2019habitude de tester sa configuration avant de red\u00e9marrer ou recharger un service. Le plus simple est de cha\u00eener les op\u00e9rations afin de n\u2019effectuer le red\u00e9marrage \/ le rechargement qu\u2019en cas de validit\u00e9 de la configuration&nbsp;:<\/p>\n\n\n\n<p>Pour <strong>recharger<\/strong> Apache&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;language&quot;:&quot;Shell&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">apachectl -t &amp;&amp; apachectl graceful<\/pre><\/div>\n\n\n\n<p>Pour <strong>red\u00e9marrer<\/strong> Apache&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;language&quot;:&quot;Shell&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">apachectl -t &amp;&amp; systemctl restart apache2<\/pre><\/div>\n\n\n\n<p>Pour <strong>recharger<\/strong> Nginx&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;language&quot;:&quot;Shell&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">nginx -t &amp;&amp; nginx -s reload<\/pre><\/div>\n\n\n\n<p>Pour <strong>recharger<\/strong> Nginx&nbsp;:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;language&quot;:&quot;Shell&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">nginx -t &amp;&amp; systemctl restart nginx<\/pre><\/div>\n<\/div><\/div><\/div><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column uag-hide-tab uag-hide-mob is-layout-flow\" style=\"flex-basis:170px\">\n\n<div class=\"cleanlogin-container\">\t\t\n\n\t<form class=\"cleanlogin-form\" method=\"post\" action=\"https:\/\/www.webodesign.net\/?page_id=2385\" onsubmit=\"submit.disabled = true; return true;\">\n\t\t\t\n\t\t<fieldset>\n\n\t\t\t\t\t\t<div class=\"cleanlogin-field\">\n                <label for=\"log\">Identifiant<\/label>\n\t\t\t\t<input class=\"cleanlogin-field-username\" type=\"text\" name=\"log\" placeholder=\"Identifiant\" aria-label=\"Identifiant\">\n\t\t\t<\/div>\n\t\t\t\n\t\t\t<div class=\"cleanlogin-field\">\n                <label for=\"pwd\">Mot de passe<\/label>\n\t\t\t\t<input class=\"cleanlogin-field-password\" type=\"password\" id=\"pwd\" name=\"pwd\" placeholder=\"Mot de passe\" aria-label=\"Mot de passe\">\n                <i class=\"bi bi-eye-slash\" id=\"togglePassword\"><\/i>\n\t\t\t<\/div>\n\n\t\t\t\t\t\n\t\t\t<input type=\"hidden\" name=\"clean_login_wpnonce\" value=\"e994c14fba\">\n            \n\t\t\t\t\t<\/fieldset>\n\t\t\n\t\t<fieldset>\n\t\t\t<input class=\"cleanlogin-field\" type=\"submit\" value=\"Se connecter\" name=\"submit\">\n\t\t\t<input type=\"hidden\" name=\"action\" value=\"login\">\n\t\t\t\n\t\t\t<div class=\"cleanlogin-field cleanlogin-field-remember\">\n\t\t\t\t<input type=\"checkbox\" id=\"rememberme\" name=\"rememberme\" value=\"forever\">\n\t\t\t\t<label for=\"rememberme\">Se souvenir de moi\u00a0?<\/label>\n\t\t\t<\/div>\n\t\t<\/fieldset>\n\n\t\t\n\t\t<div class=\"cleanlogin-form-bottom\">\n\t\t\t\n            \n\t\t\t\t\t\t\t\t\t\n\t\t<\/div>\n\t\t\n\t<\/form>\n\n<\/div>\n\n<script>\nconst togglePassword = document.querySelector('#togglePassword');\nconst password = document.querySelector('#pwd');\n\ntogglePassword.addEventListener('click', function (e) {\n    const type = password.getAttribute('type') === 'password' ? 'text' : 'password';\n    password.setAttribute('type', type);\n    this.classList.toggle('bi-eye');\n});\n<\/script>\n<\/div>\n<\/div>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>1. Pr\u00e9sentation des serveurs Apache et Nginx<\/p>\n","protected":false},"author":3,"featured_media":2256,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"qubely_global_settings":"","qubely_interactions":"","_uag_custom_page_level_css":""},"categories":[16],"tags":[],"qubely_featured_image_url":{"full":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01.jpg",940,490,false],"landscape":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01.jpg",940,490,false],"portraits":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01-540x320.jpg",540,320,true],"thumbnail":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01-150x150.jpg",150,150,true],"medium":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01-300x156.jpg",300,156,true],"medium_large":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01-768x400.jpg",768,400,true],"large":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01.jpg",940,490,false],"1536x1536":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01.jpg",940,490,false],"2048x2048":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01.jpg",940,490,false],"qubely_landscape":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01.jpg",940,490,false],"qubely_portrait":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01-540x320.jpg",540,320,true],"qubely_thumbnail":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01-140x100.jpg",140,100,true]},"qubely_author":{"display_name":"R\u00e9mi","author_link":"https:\/\/www.webodesign.net\/?author=3"},"qubely_comment":0,"qubely_category":"<a href=\"https:\/\/www.webodesign.net\/?cat=16\" rel=\"category\">Tutoriels Linux-Debian<\/a>","qubely_excerpt":"1. Pr\u00e9sentation des serveurs Apache et Nginx","uagb_featured_image_src":{"full":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01.jpg",940,490,false],"thumbnail":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01-150x150.jpg",150,150,true],"medium":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01-300x156.jpg",300,156,true],"medium_large":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01-768x400.jpg",768,400,true],"large":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01.jpg",940,490,false],"1536x1536":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01.jpg",940,490,false],"2048x2048":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01.jpg",940,490,false],"qubely_landscape":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01.jpg",940,490,false],"qubely_portrait":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01-540x320.jpg",540,320,true],"qubely_thumbnail":["https:\/\/www.webodesign.net\/wp-content\/uploads\/2023\/01\/apache-ngnix-servers-01-140x100.jpg",140,100,true]},"uagb_author_info":{"display_name":"R\u00e9mi","author_link":"https:\/\/www.webodesign.net\/?author=3"},"uagb_comment_info":0,"uagb_excerpt":"1. Pr\u00e9sentation des serveurs Apache et Nginx","_links":{"self":[{"href":"https:\/\/www.webodesign.net\/index.php?rest_route=\/wp\/v2\/posts\/2246"}],"collection":[{"href":"https:\/\/www.webodesign.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webodesign.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webodesign.net\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webodesign.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2246"}],"version-history":[{"count":9,"href":"https:\/\/www.webodesign.net\/index.php?rest_route=\/wp\/v2\/posts\/2246\/revisions"}],"predecessor-version":[{"id":2329,"href":"https:\/\/www.webodesign.net\/index.php?rest_route=\/wp\/v2\/posts\/2246\/revisions\/2329"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webodesign.net\/index.php?rest_route=\/wp\/v2\/media\/2256"}],"wp:attachment":[{"href":"https:\/\/www.webodesign.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2246"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webodesign.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2246"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webodesign.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2246"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}