Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
logiciel:reseau:http:serveur:nginx:start [2024/09/21 10:43] – supprimée - modification externe (Unknown date) 127.0.0.1 | logiciel:reseau:http:serveur:nginx:start [2024/09/21 10:43] (Version actuelle) – ↷ Liens modifiés en raison d'un déplacement. admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ====== Nginx - le serveur Web hautes performances (LEMP) ====== | ||
+ | |||
+ | Nginx (« engine X ») est un serveur Web, similaire à Apache, qui peut être utilisé : | ||
+ | * comme serveur web autonome | ||
+ | * ou comme proxy pour réduire la charge de serveurs HTTP ou de courrier électronique en arrière-plan. | ||
+ | |||
+ | Le paquet a trois versions : | ||
+ | * **nginx-full** (par défaut), avec l’ensemble de modules standard sauf ceux qui sont dans nginx-extra | ||
+ | * **nginx-light** | ||
+ | * et **nginx-extras**. | ||
+ | |||
+ | Fonctionnement de **nginx** : un processus maître gère plusieurs processus de travail qui font le traitement réel des demandes. | ||
+ | |||
+ | Le fichier de configuration est **/ | ||
+ | |||
+ | Voir le guide du débutant : **[[tutoriel: | ||
+ | ===== Pré-requis ===== | ||
+ | |||
+ | ===== Installation ===== | ||
+ | |||
+ | < | ||
+ | - **Installez [[apt> | ||
+ | /var | ||
+ | ... | ||
+ | └── www | ||
+ | └── html</ | ||
+ | /etc/nginx | ||
+ | ├── conf.d | ||
+ | ├── modules-available | ||
+ | ├── modules-enabled | ||
+ | ├── sites-available | ||
+ | ├── sites-enabled | ||
+ | └── snippets | ||
+ | </ | ||
+ | - **Testez l' | ||
+ | - en testant l' | ||
+ | ● nginx.service - A high performance web server and a reverse proxy server | ||
+ | | ||
+ | | ||
+ | < | ||
+ | </ | ||
+ | - ou en ouvrant **[[http:// | ||
+ | - **[[tutoriel: | ||
+ | |||
+ | Installez le paquet **[[apt> | ||
+ | |||
+ | L' | ||
+ | |||
+ | N' | ||
+ | </ | ||
+ | </ | ||
+ | ===== Configuration ===== | ||
+ | |||
+ | Le fichier de configuration de **nginx** est **/ | ||
+ | |||
+ | **Nous n'y toucherons pas** pour ne pas perdre les réglages lors des mises à jour. | ||
+ | <WRAP center round important 60%> | ||
+ | Au lieu de toucher au fichier / | ||
+ | * Pour la **configuration**, | ||
+ | * Pour les **hôtes virtuels**, des fichiers dans le répertoire **/ | ||
+ | * Le dossier **/ | ||
+ | </ | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Pour en savoir plus sur le fichier de configuration, | ||
+ | </ | ||
+ | |||
+ | ==== Changer le port de fonctionnement de Nginx ==== | ||
+ | |||
+ | Nginx fonctionne par défaut sur le port 80. Pour changer ce port, par exemple en 8080 | ||
+ | - **Éditez avec les droits d' | ||
+ | listen 8080; | ||
+ | }</ | ||
+ | - **Démarrez le serveur** : <cli prompt=' | ||
+ | - Vous pouvez maintenant accéder à votre site sur le port 8080 ([[http:// | ||
+ | |||
+ | ==== Configuration de Nginx en serveur Web ==== | ||
+ | |||
+ | La configuration de Nginx en serveur Web définit les URL qu'il gère et comment il traite les requêtes HTTP pour ces URL. | ||
+ | |||
+ | __**Gestion d' | ||
+ | |||
+ | La directive **error_page** demande à Nginx de renvoyer une page personnalisée ou un autre URI pour un code d' | ||
+ | |||
+ | Par exemple, pour le code 404 :<code - > | ||
+ | error_page 404 /404.html; | ||
+ | </ | ||
+ | |||
+ | Autre exemple : si Nginx ne trouve pas une page, il remplace le code 401 par le code 301 et redirige le client vers http:/ | ||
+ | |||
+ | Cette configuration est utile lorsque les clients tentent toujours d' | ||
+ | |||
+ | Le code 301 informe le navigateur que la page a été déplacée de façon permanente, et il doit remplacer automatiquement l' | ||
+ | <code - > | ||
+ | location / | ||
+ | error_page 404 =301 http:/ | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Voici un exemple de transmission d'une requête au back end lorsqu' | ||
+ | |||
+ | Comme aucun code d' | ||
+ | < | ||
+ | - **error_page** indique à Nginx d' | ||
+ | - La variable $uri dans le paramètre final de la directive **error_page** contient l'URI de la requête en cours, qui est transmise dans la redirection. | ||
+ | - Par exemple, si / | ||
+ | - **open_file_cache_errors** empêche d' | ||
+ | </ | ||
+ | <code - / | ||
+ | server { | ||
+ | ... | ||
+ | location /images/ { | ||
+ | # Set the root directory to search for the file | ||
+ | root /data/www; | ||
+ | |||
+ | # Disable logging of errors related to file existence | ||
+ | open_file_cache_errors off; | ||
+ | |||
+ | # Make an internal redirect if the file is not found | ||
+ | error_page 404 = /fetch$uri; | ||
+ | } | ||
+ | |||
+ | location /fetch/ { | ||
+ | proxy_pass http:// | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Serveur de contenu statique ==== | ||
+ | |||
+ | Le fichier de configuration peut inclure plusieurs blocs server se distinguant par les ports sur lesquels ils écoutent et par les noms de serveurs. | ||
+ | |||
+ | === location === | ||
+ | |||
+ | Une fois que nginx décide quel serveur traite une requête, il teste l'URI spécifié dans l' | ||
+ | |||
+ | Nous allons implémenter un exemple où les fichiers seront servis à partir des répertoires locaux: **/ | ||
+ | < | ||
+ | - **Créez le répertoire / | ||
+ | - **Créez le répertoire / | ||
+ | - **Créez un fichier maconf.conf** et écrivez un nouveau bloc server :<code - / | ||
+ | server { | ||
+ | location / { | ||
+ | root /data/www; | ||
+ | } | ||
+ | |||
+ | location /images/ { | ||
+ | root /data; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Ce serveur écoute sur le port standard 80 et est accessible sur la machine locale à l' | ||
+ | |||
+ | Par exemple, en réponse à la requête %%http:// | ||
+ | |||
+ | < | ||
+ | - Le bloc **location /** spécifie la racine du site. Pour les requêtes qui correspondent, | ||
+ | - Pour le second bloc **location /images/**, il y aura correspondance pour les requêtes commençant par /images/. En réponse à des requêtes dont les URI commencent par /images/, le serveur renverra des fichiers du répertoire / | ||
+ | </ | ||
+ | |||
+ | Pour appliquer la nouvelle configuration, | ||
+ | < | ||
+ | - si nginx n'est pas encore démarré, lancez-le :< | ||
+ | - ou envoyez le signal reload :< | ||
+ | </ | ||
+ | |||
+ | En cas d' | ||
+ | |||
+ | === root === | ||
+ | |||
+ | La directive **root** spécifie le répertoire racine qui sera utilisé pour rechercher un fichier. Pour obtenir le chemin d'un fichier demandé, Nginx ajoute l'URI de la requête au chemin spécifié par la directive root. | ||
+ | |||
+ | Elle peut être placée à n' | ||
+ | |||
+ | Dans l' | ||
+ | |||
+ | Elle s' | ||
+ | server { | ||
+ | root /www/data; | ||
+ | |||
+ | location / { | ||
+ | } | ||
+ | |||
+ | location /images/ { | ||
+ | } | ||
+ | |||
+ | location ~ \.(mp3|mp4) { | ||
+ | root /www/media; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Ici, pour un URI qui commence par **/ | ||
+ | |||
+ | Mais si l'URI se termine par l' | ||
+ | |||
+ | Si une requête se termine par une barre oblique, Nginx la traite comme une demande de répertoire et essaie de trouver un fichier d' | ||
+ | |||
+ | === index === | ||
+ | |||
+ | La directive **index** définit le nom du fichier d' | ||
+ | |||
+ | Pour continuer avec l' | ||
+ | < | ||
+ | - Nginx délivre le fichier / | ||
+ | - Si ce n'est pas le cas, Nginx renvoie le code HTTP 404 (non trouvé) par défaut. | ||
+ | </ | ||
+ | |||
+ | Pour configurer Nginx pour qu'il renvoie une liste de répertoires générée automatiquement, | ||
+ | location /images/ { | ||
+ | autoindex on; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Vous pouvez lister plus d'un nom de fichier dans la directive index. Nginx recherche les fichiers dans l' | ||
+ | location / { | ||
+ | index index.htm index.html; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Pour retourner le fichier d' | ||
+ | |||
+ | La redirection interne entraîne une nouvelle recherche d'un emplacement et peut aboutir à un autre emplacement, | ||
+ | location / { | ||
+ | root /data; | ||
+ | index index.html index.php; | ||
+ | } | ||
+ | |||
+ | location ~ \.php { | ||
+ | fastcgi_pass localhost: | ||
+ | ... | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Si l'URI d'une requête est /path/, et que / | ||
+ | |||
+ | Par conséquent, | ||
+ | |||
+ | === Essayer plusieurs options === | ||
+ | |||
+ | La directive **try_files** vérifie si le fichier ou le répertoire spécifié existe ; Nginx effectue une redirection interne si c'est le cas, ou renvoie un code d' | ||
+ | |||
+ | Par exemple, pour vérifier l' | ||
+ | server { | ||
+ | root /www/data; | ||
+ | |||
+ | location /images/ { | ||
+ | try_files $uri / | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Le fichier est spécifié sous forme de l'URI, qui est traité à l'aide des directives **root** ou **alias** définies dans le contexte de l' | ||
+ | |||
+ | Dans ce cas, si le fichier correspondant à l'URI d' | ||
+ | |||
+ | Le dernier paramètre peut également être un code d' | ||
+ | |||
+ | Dans l' | ||
+ | location / { | ||
+ | try_files $uri $uri/ $uri.html =404; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Dans l' | ||
+ | location / { | ||
+ | try_files $uri $uri/ @backend; | ||
+ | } | ||
+ | |||
+ | location @backend { | ||
+ | proxy_pass http:// | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Pour plus d' | ||
+ | |||
+ | ==== Configuration d'un serveur proxy simple ==== | ||
+ | |||
+ | Une utilisation fréquente de nginx consiste à le configurer en serveur proxy : un serveur reçoit les demandes, les transmet aux serveurs proxy, récupère les réponses et les envoie aux clients. | ||
+ | |||
+ | Nous allons configurer un serveur proxy de base, qui sert les demandes d' | ||
+ | |||
+ | Dans cet exemple, les deux serveurs seront définis sur une seule instance de nginx. | ||
+ | |||
+ | Tout d' | ||
+ | server { | ||
+ | listen 8080; | ||
+ | root /data/up1; | ||
+ | |||
+ | location / { | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Ce sera un serveur simple qui écoute sur le port 8080 (précédemment, | ||
+ | |||
+ | Créez ce répertoire et placez-y le fichier index.html. | ||
+ | |||
+ | Notez que la directive root est placée dans le contexte server. | ||
+ | |||
+ | Cette directive root est utilisée lorsque le bloc location sélectionné pour traiter une requête n'a pas sa propre directive racine. | ||
+ | |||
+ | Ensuite, utilisez la configuration du serveur de la section précédente et modifiez-la pour en faire une configuration de serveur proxy. | ||
+ | |||
+ | Dans le premier bloc location, mettez la directive proxy_pass en spécifiant le protocole, le nom et le port du serveur proxy dans le paramètre (dans notre cas, c'est http:// | ||
+ | server { | ||
+ | location / { | ||
+ | proxy_pass http:// | ||
+ | } | ||
+ | |||
+ | location /images/ { | ||
+ | root /data; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Nous allons modifier le second bloc location, qui pour l' | ||
+ | location ~ \.(gif|jpg|png)$ { | ||
+ | root / | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Le paramètre est une expression régulière qui correspond à tous les URI se terminant par .gif, .jpg ou .png. | ||
+ | |||
+ | Une expression régulière devrait être précédée par ~. | ||
+ | |||
+ | Les requêtes correspondantes seront mappées dans le répertoire / | ||
+ | |||
+ | Quand nginx choisit un bloc location pour servir une demande, il vérifie d' | ||
+ | |||
+ | S'il y a correspondance avec une expression régulière, | ||
+ | |||
+ | La configuration résultante d'un serveur proxy ressemblera à ceci :<code - > | ||
+ | server { | ||
+ | location / { | ||
+ | proxy_pass http:// | ||
+ | } | ||
+ | |||
+ | location ~ \.(gif|jpg|png)$ { | ||
+ | root / | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Ce serveur filtre les requêtes se terminant par .gif, .jpg, ou .png et les mappe dans le répertoire / | ||
+ | |||
+ | Pour appliquer la nouvelle configuration, | ||
+ | |||
+ | De nombreuses autres directives peuvent être utilisées pour configurer davantage une connexion proxy. | ||
+ | |||
+ | ==== Configuration de la fonction proxy de FastCGI ==== | ||
+ | |||
+ | nginx peut être utilisé pour router des requêtes vers des serveurs FastCGI qui exécutent des applications construites avec différents frameworks et langages de programmation tels que PHP. | ||
+ | |||
+ | La configuration nginx la plus basique pour travailler avec un serveur FastCGI comprend l' | ||
+ | |||
+ | Supposons que le serveur FastCGI soit accessible sur localhost: | ||
+ | |||
+ | En prenant pour base la configuration du proxy de la section précédente, | ||
+ | |||
+ | En PHP, le paramètre SCRIPT_FILENAME est utilisé pour déterminer le nom du script et le paramètre QUERY_STRING est utilisé pour transmettre les paramètres de la requête. | ||
+ | |||
+ | La configuration résultante serait :<code - > | ||
+ | server { | ||
+ | location / { | ||
+ | fastcgi_pass | ||
+ | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | ||
+ | fastcgi_param QUERY_STRING | ||
+ | } | ||
+ | |||
+ | location ~ \.(gif|jpg|png)$ { | ||
+ | root / | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Cela va mettre en place un serveur qui acheminera toutes les demandes à l' | ||
+ | |||
+ | ==== Serveurs Virtuels ==== | ||
+ | |||
+ | Voir **[[tutoriel: | ||
+ | |||
+ | Les blocs server de Nginx permettent d' | ||
+ | |||
+ | Nous allons utiliser le domaine example.com. | ||
+ | |||
+ | Par défaut, Nginx traite toujours le contenu du répertoire / | ||
+ | |||
+ | Cette configuration ne convient que si vous hébergez un seul site. Ici, nous allons créer un autre répertoire pour servir le domaine exemple.com. | ||
+ | |||
+ | Nous laisserons le répertoire / | ||
+ | |||
+ | Créez le répertoire :< | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Le -p crée le ou les répertoires parents si nécessaire. | ||
+ | </ | ||
+ | |||
+ | Après cela, nous assignerons le propriétaire du répertoire en utilisant la variable $USER :< | ||
+ | |||
+ | Définissez les autorisations pour la racine Web :< | ||
+ | |||
+ | Ensuite, vous devez créer la page index.html ; éditez avec les droits d' | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Pour que le contenu ci-dessus soit servi, nous devons créer un bloc server Nginx dans / | ||
+ | éditez avec les droits d' | ||
+ | server { | ||
+ | listen 80; | ||
+ | listen [::]:80; | ||
+ | |||
+ | root / | ||
+ | index index.html index.htm index.nginx-debian.html; | ||
+ | |||
+ | server_name example.com www.example.com; | ||
+ | |||
+ | location / { | ||
+ | try_files $uri $uri/ =404; | ||
+ | } | ||
+ | }</ | ||
+ | |||
+ | Activez en créant le lien :<cli prompt=' | ||
+ | |||
+ | Nous avons configuré deux blocs pour les requêtes du serveur: | ||
+ | < | ||
+ | - **example.com** qui servira le contenu pour exemple.com et www.example.com | ||
+ | - **default** qui servira le contenu de la demande sur le port 80. | ||
+ | </ | ||
+ | |||
+ | Nous devons faire une petite modification dans le fichier de configuration Nginx pour éviter un problème de mémoire. le problème se pose lorsque vous ajoutez plusieurs noms de serveur. | ||
+ | Éditez avec les droits d' | ||
+ | ... | ||
+ | http { | ||
+ | ... | ||
+ | server_names_hash_bucket_size 64; | ||
+ | ... | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Une fois terminées les étapes ci-dessus, testez la syntaxe du fichier Nginx :<cli prompt=' | ||
+ | |||
+ | Puis redémarrez le serveur Nginx :<cli prompt=' | ||
+ | |||
+ | si vous allez à votre adresse IP sur votre navigateur, vous devriez voir «Succès! Le bloc de serveur example.com fonctionne !>> | ||
+ | |||
+ | ==== Sécurisation avec OpenSSL ==== | ||
+ | |||
+ | * **[[tutoriel: | ||
+ | * **[[tutoriel: | ||
+ | * **[[tutoriel: | ||
+ | |||
+ | ===== Utilisation ===== | ||
+ | |||
+ | ==== Commandes de gestion de Nginx ==== | ||
+ | |||
+ | Le serveur est en cours d' | ||
+ | < | ||
+ | - **Pour l' | ||
+ | - **Pour le démarrer** : <cli prompt=' | ||
+ | - **Pour le redémarrer** : <cli prompt=' | ||
+ | - **Si vous avez apporté des modifications au serveur** : <cli prompt=' | ||
+ | - **Pour empêcher Nginx de démarrer avec le système** : <cli prompt=' | ||
+ | - **Pour démarrer Nginx avec le système** : <cli prompt=' | ||
+ | </ | ||
+ | |||
+ | Autre méthode : démarrer, arrêter et recharger la configuration | ||
+ | < | ||
+ | - **arrêt rapide** :<cli prompt=' | ||
+ | - **arrêt propre** (à exécuter sous l' utilisateur qui a démarré nginx), arrête nginx en attendant la fin des processus en cours :<cli prompt=' | ||
+ | - **recharger le fichier de configuration** :<cli prompt=' | ||
+ | - **rouvrir les fichiers journaux** :<cli prompt=' | ||
+ | </ | ||
+ | |||
+ | On peut aussi tuer les processus nginx avec l' | ||
+ | |||
+ | Pour obtenir la liste de tous les processus nginx en cours d' | ||
+ | |||
+ | ===== Désinstallation ===== | ||
+ | |||
+ | Comme d' | ||
+ | ===== Problèmes connus ===== | ||
+ | |||
+ | ~~FAQ~~ | ||
+ | |||
+ | ??? Si on installe Nginx et qu'on essaie de le démarrer, on obtient le message suivant : | ||
+ | <cli prompt=' | ||
+ | |||
+ | Starting nginx: the configuration file / | ||
+ | configuration file / | ||
+ | [emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)</ | ||
+ | |||
+ | !!! C'est logique car Apache utilise le port 80. | ||
+ | |||
+ | Il faut changer le port de fonctionnement de Nginx, par exemple en 8080 : | ||
+ | < | ||
+ | - Éditez avec les droits d' | ||
+ | listen 8080; | ||
+ | }</ | ||
+ | - Démarrez le serveur : <cli prompt=' | ||
+ | - Vous pouvez maintenant accéder à votre site sur le port 8080 ([[http:// | ||
+ | </ | ||
+ | ===== Voir aussi ===== | ||
+ | |||
+ | * **(en)** [[https:// | ||
+ | * **(en)** documentation : | ||
+ | * **(fr)** [[https:// | ||
+ | * **(fr)** [[https:// | ||
+ | |||
+ | ---- | ||
+ | //Basé sur << [[http:// |