Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédente | |||
| logiciel:reseau:http:serveur:nginx:nginx.conf:start [2024/09/21 10:43] – supprimée - modification externe (Unknown date) 127.0.0.1 | logiciel:reseau:http:serveur:nginx:nginx.conf:start [2024/09/21 10:43] (Version actuelle) – ↷ Page déplacée de logiciel:reseau:web:serveur:nginx:nginx.conf:start à logiciel:reseau:http:serveur:nginx:nginx.conf:start admin | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | {{tag> | ||
| + | ====== Structure du fichier de configuration nginx.conf ====== | ||
| + | |||
| + | ===== Syntaxe ===== | ||
| + | |||
| + | ==== Directives ==== | ||
| + | |||
| + | Le fichier de configuration est constitué de directives avec leurs paramètres. | ||
| + | * Chaque directive simple (en une ligne, un nom et des paramètres séparés par des espaces) se termine par un point-virgule **;** en bout de ligne. | ||
| + | * Un **bloc** de directives a la même structure qu'une directive simple, mais le point-virgule est remplacé par un ensemble d' | ||
| + | |||
| + | Voici quelques exemples de directives simples. | ||
| + | <code - / | ||
| + | ... | ||
| + | user | ||
| + | error_log | ||
| + | worker_processes 1; | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | ==== Contextes ==== | ||
| + | |||
| + | Un bloc de directives qui peut avoir d' | ||
| + | |||
| + | Quelques blocs de directives de premier niveau, appelées **contextes**, | ||
| + | < | ||
| + | - **events** : Processus général de connexion | ||
| + | - **http** : flux HTTP | ||
| + | - **mail** : flux Mail | ||
| + | - **stream** : flux TCP et UDP | ||
| + | </ | ||
| + | |||
| + | Les directives placées en dehors de tout contexte sont considérées comme étant dans le **contexte principal**. | ||
| + | |||
| + | Les évènements et les directives **http** sont dans le **contexte principal**, | ||
| + | |||
| + | La configuration suivante illustre l' | ||
| + | user nobody; # une directive dans le contexte " | ||
| + | |||
| + | events { | ||
| + | # configuration du traitement de la connexion | ||
| + | } | ||
| + | |||
| + | http { | ||
| + | # Configuration spécifique à HTTP et affectant tous les serveurs virtuels | ||
| + | |||
| + | server { | ||
| + | # configuration du serveur HTTP virtuel 1 | ||
| + | location /one { | ||
| + | # configuration pour le traitement des URI commençant par '/ one' | ||
| + | location /two { | ||
| + | # configuration pour le traitement des URI commençant par '/ | ||
| + | } | ||
| + | } | ||
| + | | ||
| + | server { | ||
| + | # configuration du serveur HTTP virtuel 2 | ||
| + | } | ||
| + | } | ||
| + | |||
| + | stream { | ||
| + | # Configuration spécifique à TCP / UDP et affectant tous les serveurs virtuels | ||
| + | server { | ||
| + | # configuration du serveur TCP virtuel 1 | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Commentaires ==== | ||
| + | |||
| + | Dans une ligne, ce qui suit un **#** est un commentaire. | ||
| + | |||
| + | ==== Utilisation de variables ==== | ||
| + | |||
| + | On peut utiliser des variables, dont le nom commence par le caractère **$** (dollar). | ||
| + | |||
| + | Des variables sont prédéfinies, | ||
| + | |||
| + | Par exemple, | ||
| + | * **$remote_addr** contient l' | ||
| + | * **$uri** contient la valeur réelle de l'URI. | ||
| + | |||
| + | ==== Directive location : configuration des emplacements ==== | ||
| + | |||
| + | Un bloc **location** peut contenir d' | ||
| + | |||
| + | Une directive **location** a deux types de paramètres : | ||
| + | < | ||
| + | - les chaînes de préfixe (chemins) | ||
| + | - et les expressions régulières. | ||
| + | </ | ||
| + | |||
| + | Dans l' | ||
| + | location /some/path/ { | ||
| + | ... | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Une **expression régulière** est précédée : | ||
| + | * du tilde (**~**) pour une correspondance sensible à la casse, | ||
| + | * ou du tilde-astérisque (**~***) pour une correspondance insensible à la casse. | ||
| + | |||
| + | L' | ||
| + | location ~ \.html? { | ||
| + | ... | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Un contexte **location** peut contenir des directives qui définissent la façon de résoudre une requête : servir un fichier statique ou transmettre la requête à un serveur proxy. | ||
| + | |||
| + | Dans l' | ||
| + | server { | ||
| + | location /images/ { | ||
| + | root /data; | ||
| + | } | ||
| + | |||
| + | location / { | ||
| + | proxy_pass http:// | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | La directive **root** spécifie le chemin du système de fichiers où rechercher les fichiers statiques à servir. | ||
| + | |||
| + | L'URI de la demande associée à l' | ||
| + | |||
| + | Dans l' | ||
| + | |||
| + | La directive **proxy_pass** transmet la requête au serveur proxy accédé avec l'URL configurée. | ||
| + | |||
| + | La réponse du serveur proxy est ensuite renvoyée au client. | ||
| + | |||
| + | Dans l' | ||
| + | |||
| + | ===== Héritage ===== | ||
| + | |||
| + | Un contexte fils (contenu dans un autre contexte, son parent) hérite des paramètres des directives du parent. | ||
| + | |||
| + | Si une directive apparaît dans plusieurs contextes, le paramètre hérité du parent est remplacé par la directive du contexte enfant. | ||
| + | |||
| + | Par exemple, la directive **proxy_set_header**. | ||
| + | |||
| + | ===== Renvoyer des codes d' | ||
| + | |||
| + | Certains URI de site Web exigent le retour immédiat d'une réponse avec une erreur spécifique ou un code de redirection, | ||
| + | |||
| + | La méthode la plus simple consiste à utiliser la directive **return**. Par exemple :<code - > | ||
| + | location /wrong/url { | ||
| + | return 404; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | - Le premier paramètre de retour est un code de réponse. | ||
| + | - Le deuxième paramètre facultatif peut être l'URL d'une redirection (pour les codes 301, 302, 303 et 307) ou le texte à renvoyer dans le corps de la réponse. Par exemple :<code - > | ||
| + | location / | ||
| + | return 301 http:// | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Rewrite : réécriture d'URI dans les demandes ===== | ||
| + | |||
| + | la directive **rewrite** permet de modifier une URI de requête plusieurs fois lors du traitement. Elle a un paramètre facultatif et deux paramètres obligatoires : | ||
| + | < | ||
| + | - expression régulière à laquelle l'URI de la requête doit correspondre (obligatoire) | ||
| + | - URI à substituer à l'URI correspondant | ||
| + | - un indicateur qui peut interrompre le traitement d' | ||
| + | </ | ||
| + | |||
| + | Par exemple :<code nginx > | ||
| + | location /users/ { | ||
| + | rewrite ^/ | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Vous pouvez inclure plusieurs directives **rewrite** dans les contextes **server** et **location**. | ||
| + | |||
| + | Nginx exécute les directives une par une dans l' | ||
| + | |||
| + | Les directives **rewrite** dans un contexte server sont exécutées une fois lorsque ce contexte est sélectionné. | ||
| + | |||
| + | Une fois que Nginx a traité un ensemble d' | ||
| + | |||
| + | Si l' | ||
| + | |||
| + | Si l'URI correspond à l'un de ceux-ci, une recherche du nouvel emplacement démarre après le traitement de toutes les directives de réécriture définies. | ||
| + | |||
| + | L' | ||
| + | server { | ||
| + | ... | ||
| + | rewrite ^(/ | ||
| + | rewrite ^(/ | ||
| + | return | ||
| + | ... | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Cet exemple de configuration distingue deux ensembles d'URI. | ||
| + | |||
| + | Les URI tels que **/ | ||
| + | |||
| + | En raison de l' | ||
| + | |||
| + | De même, les URI tels que / | ||
| + | |||
| + | Si un URI ne correspond à aucune directive rewrite, Nginx renvoie le code d' | ||
| + | |||
| + | Deux paramètres interrompent le traitement des directives de réécriture : | ||
| + | < | ||
| + | - **last** : Arrête l' | ||
| + | - **break** : Comme la directive break, arrête le traitement des directives de réécriture dans le contexte actuel et annule la recherche des emplacements correspondant au nouvel URI. Les directives de réécriture dans le nouvel emplacement ne sont pas exécutées. | ||
| + | </ | ||
| + | |||
| + | ===== sub_filter : réécriture des réponses HTTP ===== | ||
| + | |||
| + | La directive **sub_filter** permet de réécrire ou modifier le contenu d'une réponse HTTP, en substituant une chaine à une autre. | ||
| + | |||
| + | Elle permet des changements plus complexes, avec des variables et des chaines de substitution. | ||
| + | |||
| + | Par exemple, pour modifier les liens absolus qui renvoient à un autre serveur que le proxy :<code - / | ||
| + | location / { | ||
| + | sub_filter | ||
| + | sub_filter_once off; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Voici un autre exemple qui modifie http:// en http_s_:// et remplace l' | ||
| + | |||
| + | La directive **sub_filter_once** demande à Nginx d' | ||
| + | location / { | ||
| + | sub_filter | ||
| + | sub_filter | ||
| + | sub_filter_once on; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | La partie de la réponse déjà modifiée par sub_filter ne sera pas remplacée à nouveau si une autre correspondance sub_filter se produit. | ||
| + | </ | ||
| + | |||
| + | ===== Voir aussi ===== | ||
| + | |||
| + | * **(fr)** [[http:// | ||
| + | * **(en)** [[http:// | ||
| + | |||
| + | ---- | ||
| + | //Basé sur << [[http:// | ||