Maison  >  Article  >  Opération et maintenance  >  Comment nginx gère les requêtes http

Comment nginx gère les requêtes http

(*-*)浩
(*-*)浩original
2019-06-04 16:20:475862parcourir

Le traitement des requêtes http par nginx est la fonction la plus importante de nginx et aussi la partie la plus complexe. Vous pouvez parler grossièrement du processus d'exécution :

Comment nginx gère les requêtes http

Requête de lecture de l'en-tête ;

Analyser la ligne de requête ; ;

Analyser l'en-tête de la requête ;

Lire le corps de la requête

Démarrer le plus ; partie importante, c'est-à-dire le traitement en plusieurs étapes ; nginx divise le traitement de la demande en 11 étapes, ce qui signifie qu'après que nginx a lu la ligne de demande et l'en-tête de la demande, il encapsule la demande dans la structure ngx_http_request_t, puis le gestionnaire de chaque étape sera basé sur ce ngx_http_request_t, Traiter la demande, telle que la réécriture de l'URI, le contrôle des autorisations, la recherche de chemin, la génération de contenu et la journalisation, etc.

Renvoyer le résultat au client

La fonction principale de la fonction ngx_http_process_request_line est d'analyser la ligne de requête. De plus, parce qu'elle implique des opérations d'E/S réseau, même une ligne de requête courte peut ne pas être lue en même temps, donc dans la fonction ngx_http_init_request précédente, la fonction ngx_http_process_request_line est. défini sur La fonction de traitement des événements de lecture n'a qu'un paramètre de type ngx_event_t * unique, et au début de la fonction, il est également nécessaire de déterminer s'il s'agit d'un événement de délai d'attente. Si tel est le cas, fermez la demande et la connexion, sinon démarrez le. processus d'analyse normal. Appelez d'abord la fonction ngx_http_read_request_header pour lire les données.

Le traitement en plusieurs étapes est la partie la plus importante du module nginx, car des modules tiers sont également enregistrés ici


Par exemple, quelqu'un a écrit un tiers qui utilise ; nginx et memcache pour le module de mise en cache des pages, vous pouvez également remplacer memcache par un cluster redis, etc.

De plus, le traitement en plusieurs étapes de nginx est quelque peu similaire au middleware des frameworks Web python et golang. le mode décorateur pour superposer les gestionnaires, tandis que nginx utilise un tableau (liste chaînée) pour combiner les gestionnaires à plusieurs étapes, puis les exécute selon la liste chaînée du gestionnaire

Le localisateur de ressources uniforme (url) envoyé ; par le client correspond à un certain chemin sur le serveur Pour les ressources, il suffit au serveur Web de mapper l'URL sur le chemin du système de fichiers local, puis de lire le fichier correspondant et de le renvoyer au client. Mais ce n'était que la demande du premier Internet. De nos jours, Internet a une variété de demandes complexes, exigeant que les serveurs Web gèrent des problèmes tels que la sécurité et le contrôle des autorisations, le contenu multimédia et les pages Web dynamiques. Ces exigences complexes ont fait que le serveur Web n'est plus un programme court, mais un système qui doit être soigneusement conçu et modularisé.

La bonne modularité de nginx se reflète dans sa division en plusieurs étapes du processus de traitement des demandes. Le processus de traitement en plusieurs étapes est comme une chaîne d'assemblage. Un processus nginx peut traiter simultanément plusieurs demandes à différentes étapes. nginx permet aux développeurs d'enregistrer des modules à n'importe quelle étape du processus de traitement. Pendant la phase de démarrage, nginx organisera toutes les fonctions de traitement des modules enregistrées à chaque étape dans une chaîne d'exécution dans l'ordre.

Pour plus d'articles techniques liés à Nginx, veuillez visiter la colonne

Tutoriel d'utilisation de Nginx pour apprendre !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn