Section courante

A propos

Section administrative du site

 Serveur  Installation  Utilisation  Tutoriel  Aide 
Vue par liste complète
Installation
Introduction
Référence des directives
Référence des variables
Référence des modules
Les premiers pas
Contrôler nginx
Méthodes de traitement des connexions
Configuration des hachages
Un journal de bord de débogage
Enregistrement dans syslog
Fichier de configuration des unités de mesure
Paramètres de la ligne de commande
nginx pour Windows
Prise en charge de QUIC et HTTP/3
Comment Nginx traite une requête
Noms des serveurs
Utilisation de nginx comme équilibreur de charge HTTP
Configuration des serveurs HTTPS
Comment Nginx traite une session TCP/UDP
Les opérations
(Re)démarrer/arrêter
Préface
Notes légal
Dictionnaire
Recherche

Les premiers pas

Cette page donne une introduction de base à nginx et décrit certaines tâches simples pouvant être effectuées avec lui. On suppose que nginx est déjà installé sur votre machine. Si ce n'est pas le cas, consultez la page Installation de nginx. Cette page décrit comment démarrer et arrêter nginx et recharger sa configuration, explique la structure du fichier de configuration et décrit comment configurer nginx pour servir du contenu statique, comment configurer nginx comme serveur proxy et comment le connecter à une application FastCGI.

nginx possède un processus maître et plusieurs processus de travail. L'objectif principal du processus maître est de lire et d'évaluer la configuration et de maintenir les processus de travail. Les processus de travail effectuent le traitement réel des demandes. nginx utilise un modèle basé sur les événements et des mécanismes dépendants du système d'exploitation pour répartir efficacement les demandes entre les processus de travail. Le nombre de processus de travail est défini dans le fichier de configuration et peut être fixé pour une configuration donnée ou ajusté automatiquement en fonction du nombre de coeurs de processeur disponibles (voir worker_processes).

Le fonctionnement de nginx et de ses modules est déterminé dans le fichier de configuration. Par défaut, le fichier de configuration est nommé nginx.conf et placé dans le répertoire /usr/local/nginx/conf, /etc/nginx ou /usr/local/etc/nginx.

Démarrage, arrêt et rechargement de la configuration

Pour démarrer nginx, exécutez le fichier exécutable. Une fois nginx démarré, il peut être contrôlé en appelant l'exécutable avec le paramètre -s. Utilisez la syntaxe suivante :

nginx -s signal

Où le signal peut être l'un des suivants :

Signal Description
stop Arrêt rapide
quit Arrêt gracieux
reload Rechargement du fichier de configuration
reopen Réouverture des fichiers journaux

Par exemple, pour arrêter les processus nginx en attendant que les processus de travail aient fini de traiter les requêtes en cours, la commande suivante peut être exécutée :

nginx -s quit

Cette commande doit être exécutée sous le même utilisateur ayant démarré nginx.

Les modifications apportées au fichier de configuration ne seront pas appliquées tant que la commande de rechargement de la configuration n'aura pas été envoyée à nginx ou qu'il n'aura pas été redémarré. Pour recharger la configuration, exécutez :

nginx -s reload

Une fois que le processus maître reçoit le signal de rechargement de la configuration, il vérifie la validité de la syntaxe du nouveau fichier de configuration et tente d'appliquer la configuration fournie dans celui-ci. Si cela réussit, le processus maître démarre de nouveaux processus de travail et envoie des messages aux anciens processus de travail, leur demandant de s'arrêter. Sinon, le processus maître annule les modifications et continue de travailler avec l'ancienne configuration. Les anciens processus de travail, recevant une commande d'arrêt, cessent d'accepter de nouvelles connexions et continuent de traiter les demandes actuelles jusqu'à ce que toutes ces demandes soient traitées. Après cela, les anciens processus de travail se terminent.

Un signal peut également être envoyé aux processus nginx à l'aide d'outils Linux tels que l'utilitaire kill. Dans ce cas, un signal est envoyé directement à un processus avec un ID de processus donné. L'ID de processus du processus maître nginx est écrit, par défaut, dans le nginx.pid dans le répertoire /usr/local/nginx/logs ou /var/run. Par exemple, si l'ID de processus maître est 1628, pour envoyer le signal QUIT entraînant l'arrêt normal de nginx, exécutez :

kill -s QUIT 1628

Pour obtenir la liste de tous les processus nginx en cours d'exécution, l'utilitaire ps peut être utilisé, par exemple, de la manière suivante :

ps -ax | grep nginx

Structure du fichier de configuration

nginx se compose de modules contrôlés par des directives spécifiées dans le fichier de configuration. Les directives sont divisées en directives simples et directives de bloc. Une directive simple se compose du nom et des paramètres séparés par des espaces et se termine par un point-virgule (;). Une directive de bloc a la même structure qu'une directive simple, mais au lieu du point-virgule, elle se termine par un ensemble d'instructions supplémentaires entourées d'accolades ({ et }). Si une directive de bloc peut avoir d'autres directives entre accolades, elle est appelée contexte (exemples : événements, http, serveur et emplacement).

Les directives placées dans le fichier de configuration en dehors de tout contexte sont considérées comme faisant partie du contexte principal. Les directives événements et http résident dans le contexte principal, le serveur dans http et l'emplacement dans le serveur.

Le reste d'une ligne après le signe # est considéré comme un commentaire.

Diffusion de contenu statique

Une tâche importante du serveur Web consiste à diffuser des fichiers (tels que des images ou des pages HTML statiques). Vous allez implémenter un exemple où, en fonction de la demande, les fichiers seront diffusés à partir de différents répertoires locaux : /data/www (pouvant contenir des fichiers HTML) et /data/images (contenant des images). Cela nécessitera la modification du fichier de configuration et la configuration d'un bloc serveur à l'intérieur du bloc http avec deux blocs d'emplacement.

Tout d'abord, créez le répertoire /data/www et placez-y un fichier index.html avec n'importe quel contenu texte, puis créez le répertoire /data/images et placez-y des images.

Ensuite, ouvrez le fichier de configuration. Le fichier de configuration par défaut comprend déjà plusieurs exemples du bloc serveur, la plupart commentés. Pour l'instant, commentez tous ces blocs et démarrez un nouveau bloc serveur :

http {
    server {
    }
}

En général, le fichier de configuration peut inclure plusieurs blocs de serveur distingués par les ports sur lesquels ils écoutent et par les noms de serveur. Une fois que nginx décide quel serveur traite une requête, il teste l'URI spécifié dans l'entête de la requête par rapport aux paramètres des directives d'emplacement définies à l'intérieur du bloc de serveur.

Ajoutez le bloc d'emplacement suivant au bloc de serveur :

location / {
    root /data/www;
}

Ce bloc d'emplacement spécifie le préfixe «/» par rapport à l'URI de la requête. Pour les requêtes correspondantes, l'URI sera ajouté au chemin spécifié dans la directive racine, c'est-à-dire à /data/www, pour former le chemin vers le fichier demandé sur le système de fichiers local. S'il existe plusieurs blocs d'emplacement correspondants, nginx sélectionne celui ayant le préfixe le plus long. Le bloc d'emplacement ci-dessus fournit le préfixe le plus court, de longueur un, et donc seulement si tous les autres blocs d'emplacement ne parviennent pas à fournir une correspondance, ce bloc sera utilisé.

Ensuite, ajoutez le deuxième bloc d'emplacement :

location /images/ {
    root /data;
}

Il s'agira d'une correspondance pour les requêtes commençant par /images/ (l'emplacement / correspond également à ces requêtes, mais possède un préfixe plus court).

La configuration résultante du bloc serveur devrait ressembler à ceci :

server {
    location / {
        root /data/www;
    }

    location /images/ {
        root /data;
    }
}

Il s'agit déjà d'une configuration fonctionnelle d'un serveur écoutant sur le port standard 80 et est accessible sur la machine locale à l'adresse http://localhost/. En réponse aux requêtes dont les URI commencent par /images/, le serveur enverra des fichiers depuis le répertoire /data/images. Par exemple, en réponse à la requête http://localhost/images/example.png, nginx enverra le fichier /data/images/example.png. Si ce fichier n'existe pas, nginx enverra une réponse indiquant l'erreur 404. Les requêtes dont les URI ne commencent pas par /images/ seront cartographiées sur le répertoire /data/www. Par exemple, en réponse à la requête http://localhost/some/example.html, nginx enverra le fichier /data/www/some/example.html.

Pour appliquer la nouvelle configuration, démarrez nginx s'il n'est pas encore démarré ou envoyez le signal de rechargement au processus maître de nginx, en exécutant :

nginx -s reload

Si quelque chose ne fonctionne pas comme prévu, vous pouvez essayer de trouver la raison dans les fichiers access.log et error.log dans le répertoire /usr/local/nginx/logs ou /var/log/nginx.

Configuration d'un serveur proxy simple

L'une des utilisations fréquentes de nginx est de le configurer comme serveur proxy, c'est-à-dire un serveur reçoit les requêtes, les transmet aux serveurs proxy, récupère les réponses de ces derniers et les envoie aux clients.

Nous allons configurer un serveur proxy de base, traitant les requêtes d'images avec des fichiers du répertoire local et envoie toutes les autres requêtes à un serveur proxy. Dans cet exemple, les deux serveurs seront définis sur une seule instance nginx.

Tout d'abord, définissez le serveur proxy en ajoutant un bloc serveur supplémentaire au fichier de configuration de nginx avec le contenu suivant :

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

Il s'agira d'un serveur simple écoutant sur le port 8080 (auparavant, la directive listen n'était pas spécifiée puisque le port standard 80 était utilisé) et cartographie toutes les requêtes vers le répertoire /data/up1 sur le système de fichiers local. Créez ce répertoire et placez-y le fichier index.html. Notez que la directive root est placée dans le contexte du serveur. Une telle directive root est utilisée lorsque le bloc d'emplacement sélectionné pour traiter une requête n'inclut pas sa propre directive root.

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 d'emplacement, placez la directive proxy_pass avec le protocole, le nom et le port du serveur proxy spécifié dans le paramètre (dans notre cas, il s'agit de http://localhost:8080) :

server {
    location / {
        proxy_pass http://localhost:8080;
    }

    location /images/ {
        root /data;
    }
}

Nous allons modifier le deuxième bloc d'emplacement, cartographiant actuellement les requêtes avec le préfixe /images/ aux fichiers sous le répertoire /data/images, pour le faire correspondre aux requêtes d'images avec des extensions de fichier typiques. Le bloc d'emplacement modifié ressemble à ceci :

location ~ \.(gif|jpg|png)$ {
    root /data/images;
}

Le paramètre est une expression régulière correspondant à tous les URI se terminant par .gif, .jpg ou .png. Une expression régulière doit être précédée de ~. Les requêtes correspondantes seront cartographiées vers le répertoire /data/images.

Lorsque nginx sélectionne un bloc d'emplacement pour traiter une requête, il vérifie d'abord les directives d'emplacement spécifiant les préfixes, en mémorisant l'emplacement avec le préfixe le plus long, puis vérifie les expressions régulières. S'il y a une correspondance avec une expression régulière, nginx choisit cet emplacement ou, sinon, il choisit celui mémorisé précédemment.

La configuration résultante d'un serveur proxy ressemblera à ceci :

server {
    location / {
        proxy_pass http://localhost:8080/;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

Ce serveur filtrera les requêtes se terminant par .gif, .jpg ou .png et les cartographiera au répertoire /data/images (en ajoutant URI au paramètre de la directive root) et transmettra toutes les autres requêtes au serveur proxy configuré ci-dessus.

Pour appliquer une nouvelle configuration, envoyez le signal de rechargement à nginx comme décrit dans les sections précédentes.

Il existe de nombreuses autres directives pouvant être utilisées pour configurer davantage une connexion proxy.

Configuration du proxy FastCGI

nginx peut être utilisé pour acheminer les requêtes vers les serveurs FastCGI exécutant des applications créées avec divers cadres d'applications et langages de programmation tels que PHP.

La configuration nginx la plus basique pour fonctionner avec un serveur FastCGI comprend l'utilisation de la directive fastcgi_pass au lieu de la directive proxy_pass et des directives fastcgi_param pour définir les paramètres transmis à un serveur FastCGI. Supposons que le serveur FastCGI soit accessible sur localhost:9000. En prenant comme base la configuration du proxy de la section précédente, remplacez la directive proxy_pass par la directive fastcgi_pass et remplacez le paramètre par localhost:9000. 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 :

server {
    location / {
        fastcgi_pass localhost:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param QUERY_STRING $query_string;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

Cela configurera un serveur acheminant toutes les demandes, à l'exception des demandes d'images statiques, vers le serveur proxy fonctionnant sur localhost:9000 via le protocole FastCGI.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Lundi, le 30 décembre 2024