Maison Opération et maintenance Nginx Qu'est-ce que la connexion Nginx ?

Qu'est-ce que la connexion Nginx ?

Nov 28, 2019 am 11:45 AM
nginx

Qu'est-ce que la connexion Nginx ?

connexion

Dans Nginx, la connexion est l'encapsulation de la connexion TCP, y compris le socket connecté et les événements de lecture. , écrire des événements. Grâce à la connexion encapsulée par Nginx, nous pouvons facilement utiliser Nginx pour gérer les questions liées à la connexion, telles que l'établissement de connexions, l'envoi et la réception de données, etc.                                                                                                                                                                 Peut également être utilisé comme serveur de messagerie. Bien entendu, en utilisant la connexion fournie par Nginx, nous pouvons gérer n’importe quel service backend.

En combinaison avec le cycle de vie d'une connexion TCP, jetons un coup d'œil à la façon dont Nginx gère une connexion. Tout d'abord, lorsque Nginx démarre, il analysera le fichier de configuration pour obtenir le port et l'adresse IP qui doivent être surveillés. Ensuite, dans le processus maître Nginx, initialisez d'abord le socket de surveillance (créez le socket, définissez l'adresse). et d'autres options, se lier au port d'adresse IP spécifié, écouter à nouveau), puis débourser plusieurs processus enfants, puis les processus enfants seront en compétition pour accepter de nouvelles connexions.

À ce stade, le client peut initier une connexion à Nginx.

Lorsque le client et le serveur établissent une connexion via une négociation à trois, un sous-processus de Nginx acceptera avec succès, obtiendra le socket de la connexion établie, puis créera une encapsulation Nginx de la connexion, à savoir Structure ngx_connection_t.

Ensuite, définissez les fonctions de traitement des événements de lecture et d'écriture et ajoutez des événements de lecture et d'écriture pour échanger des données avec le client. Enfin, Nginx ou le client ferme activement la connexion. À ce stade, une connexion prend fin.

Bien entendu, Nginx peut également être utilisé comme client pour demander des données à d'autres serveurs (comme le module amont). À ce stade, les connexions créées avec d'autres serveurs sont également encapsulées dans ngx_connection_t.

En tant que client, Nginx obtient d'abord une structure ngx_connection_t, puis crée un socket et définit les attributs du socket (tels que non bloquant). Ajoutez ensuite des événements de lecture et d'écriture, appelez connect/read/write pour appeler la connexion, et enfin fermez la connexion et relâchez ngx_connection_t.

Dans Nginx, chaque processus a une limite maximale sur le nombre de connexions, qui est différente de la limite du système sur fd. Dans le système d'exploitation, grâce à ulimit -n, nous pouvons obtenir le nombre maximum de fds qu'un processus peut ouvrir, c'est-à-dire aucun fichier. Parce que chaque connexion socket occupera un fd, cela limitera également le nombre maximum de connexions de notre processus. Bien sûr, cela affectera également directement le nombre maximum de simultanéités que notre programme peut prendre en charge. Lorsque le fd est épuisé, la création d'un socket échouera.

Nginx définit le nombre maximum de connexions prises en charge par chaque processus en définissant worker_connectons. Si cette valeur est supérieure à nofile, alors le nombre maximum réel de connexions est nofile et Nginx vous avertira.

Nginx est géré via un pool de connexions lors de sa mise en œuvre. Chaque processus de travail dispose d'un pool de connexions indépendant, et la taille du pool de connexions est worker_connections. Ce qui est enregistré ici dans le pool de connexions n'est pas réellement une connexion réelle, c'est juste un tableau de structure ngx_connection_t de taille worker_connections.

De plus, Nginx enregistrera tous les ngx_connection_t gratuits via une liste chaînée free_connections. Chaque fois qu'une connexion est obtenue, il en obtiendra une dans la liste de connexions gratuites. Après l'avoir utilisée, elle sera remise dans la connexion gratuite. liste.

Ici, beaucoup de gens comprendront mal la signification du paramètre worker_connections, pensant que cette valeur est la valeur maximale de la connexion que Nginx peut établir. En fait, cette valeur représente le nombre maximum de connexions pouvant être établies par chaque processus de travail. Par conséquent, le nombre maximum de connexions pouvant être établies par un Nginx doit être worker_connections * work_processes.

Bien sûr, nous parlons ici du nombre maximum de connexions. Pour les requêtes HTTP pour les ressources locales, le nombre maximum de simultanéités pouvant être prises en charge est worker_connections * worker_processes. proxy, le nombre maximum de simultanéités doit être work_connections * work_processes/2.

Car en tant que serveur proxy inverse, chaque connexion simultanée établira une connexion avec le client et une connexion avec le service back-end, qui occupera deux connexions.

Eh bien, comme nous l'avons déjà dit, après la connexion d'un client, plusieurs processus inactifs se disputeront la connexion. Il est facile de voir que cette concurrence entraînera une injustice si un processus est accepté. Il y a plus d'opportunités, et ses connexions inactives seront rapidement utilisées. Si un certain contrôle n'est pas effectué à l'avance, lorsqu'une nouvelle connexion TCP est acceptée, car il ne peut pas obtenir une connexion inactive et ne peut pas transférer cette connexion à d'autres processus, cela finira par le faire. la connexion TCP ne peut pas être traitée et est terminée.

C'est évidemment injuste. Certains processus ont des connexions libres mais n'ont aucune chance de les traiter. Certains processus suppriment artificiellement les connexions parce qu'ils n'ont pas de connexions libres. Alors, comment résoudre ce problème ?

Tout d'abord, le traitement Nginx doit d'abord activer l'option accept_mutex. À ce stade, seul le processus qui a obtenu accept_mutex ajoutera l'événement accept. En d'autres termes, Nginx contrôlera si le processus ajoute l'acceptation. événement.

Nginx utilise une variable appelée ngx_accept_disabled pour contrôler s'il faut concourir pour le verrou accept_mutex.

Dans le premier morceau de code, calculez la valeur de ngx_accept_disabled. Cette valeur correspond à un huitième du nombre total de connexions dans un seul processus Nginx. Soustrayez le nombre restant de connexions inactives. Le ngx_accept_disabled résultant a un. pattern , lorsque le nombre de connexions restantes est inférieur à un huitième du nombre total de connexions, sa valeur est supérieure à 0, et plus le nombre de connexions restantes est petit, plus cette valeur est grande.

Regardez le deuxième morceau de code. Lorsque ngx_accept_disabled est supérieur à 0, il n'essaiera pas d'acquérir le verrou accept_mutex et décrémentera ngx_accept_disabled de 1. Par conséquent, chaque fois qu'il sera exécuté ici, il sera décrémenté de 1. 1 jusqu'à ce qu'il soit inférieur à 0.

Ne pas acquérir le verrou accept_mutex équivaut à renoncer à la possibilité d'obtenir la connexion. On voit clairement que lorsqu'il y a moins de connexions libres, plus ngx_accept_disable est grand, donc plus d'opportunités sont données, donc. que d'autres processus Les chances d'acquérir le verrou sont également plus grandes.

Si vous n'acceptez pas, votre propre connexion sera contrôlée et le pool de connexions des autres processus sera utilisé de cette manière, Nginx contrôle l'équilibre des connexions entre plusieurs processus.

ngx_accept_disabled = ngx_cycle->connection_n / 8
        - ngx_cycle->free_connection_n;    if (ngx_accept_disabled > 0) {
        ngx_accept_disabled--;

    } else {        if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) {            return;
        }        if (ngx_accept_mutex_held) {
            flags |= NGX_POST_EVENTS;

        } else {            if (timer == NGX_TIMER_INFINITE
                    || timer > ngx_accept_mutex_delay)
            {
                timer = ngx_accept_mutex_delay;
            }
        }
    }

La connexion sera présentée ici en premier. Il vous suffit de savoir quelle est la connexion dans Nginx, et la connexion est une utilisation relativement avancée.

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 de ce site Web
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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Porce de variable PHP expliquée
1 Il y a quelques mois By 百草
Commentant le code en php
4 Il y a quelques semaines By 百草
Conseils pour écrire des commentaires PHP
4 Il y a quelques semaines By 百草
<🎜>: Grow A Garden - Guide complet des marchands itinérants
3 Il y a quelques semaines By Jack chen

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1510
276
Comment exécuter le code PHP après avoir écrit du code PHP? Plusieurs façons courantes d'exécuter le code PHP Comment exécuter le code PHP après avoir écrit du code PHP? Plusieurs façons courantes d'exécuter le code PHP May 23, 2025 pm 08:33 PM

Le code PHP peut être exécuté de plusieurs manières: 1. Utilisez la ligne de commande pour entrer directement le "nom de fichier PHP" pour exécuter le script; 2. Mettez le fichier dans le répertoire racine du document et accédez-y via le navigateur via le serveur Web; 3. Exécutez-le dans l'IDE et utilisez l'outil de débogage intégré; 4. Utilisez le bac à sable PHP en ligne ou la plate-forme d'exécution de code pour les tests.

Après avoir installé Nginx, le chemin du fichier de configuration et les paramètres initiaux Après avoir installé Nginx, le chemin du fichier de configuration et les paramètres initiaux May 16, 2025 pm 10:54 PM

La compréhension du chemin du fichier de configuration de Nginx et des paramètres initiaux est très importante car il s'agit de la première étape dans l'optimisation et la gestion d'un serveur Web. 1) Le chemin du fichier de configuration est généralement /etc/nginx/nginx.conf. La syntaxe peut être trouvée et testée à l'aide de la commande nginx-t. 2) Les paramètres initiaux incluent les paramètres globaux (tels que l'utilisateur, worker_processs) et les paramètres HTTP (tels que l'inclusion, log_format). Ces paramètres permettent la personnalisation et l'extension en fonction des exigences. Une configuration incorrecte peut entraîner des problèmes de performances et des vulnérabilités de sécurité.

Comment limiter les ressources des utilisateurs dans Linux? Comment configurer Ulimit? Comment limiter les ressources des utilisateurs dans Linux? Comment configurer Ulimit? May 29, 2025 pm 11:09 PM

Linux System restreint les ressources utilisateur via la commande UliMIT pour éviter une utilisation excessive des ressources. 1.Ulimit est une commande shell intégrée qui peut limiter le nombre de descripteurs de fichiers (-n), la taille de la mémoire (-v), le nombre de threads (-u), etc., qui sont divisés en limite douce (valeur effective actuelle) et limite dure (limite supérieure maximale). 2. Utilisez directement la commande ulimit pour une modification temporaire, telle que Ulimit-N2048, mais elle n'est valable que pour la session en cours. 3. Pour un effet permanent, vous devez modifier /etc/security/limits.conf et les fichiers de configuration PAM, et ajouter SessionRequiredPam_limits.so. 4. Le service SystemD doit définir Lim dans le fichier unitaire

Quelles sont les compétences de configuration Debian Nginx? Quelles sont les compétences de configuration Debian Nginx? May 29, 2025 pm 11:06 PM

Lors de la configuration de Nginx sur Debian System, les éléments suivants sont quelques conseils pratiques: la structure de base des paramètres globaux du fichier de configuration: définir les paramètres comportementaux qui affectent l'intégralité du service NGINX, tel que le nombre de threads de travail et les autorisations d'utilisateurs en cours d'exécution. Pièce de gestion des événements: Décider comment Nginx s'occupe des connexions réseau est une configuration clé pour améliorer les performances. Pièce de service HTTP: contient un grand nombre de paramètres liés au service HTTP et peut intégrer plusieurs serveurs et blocs de localisation. Options de configuration de base Worker_Connections: Définissez le nombre maximal de connexions que chaque thread de travailleur peut gérer, généralement définie sur 1024. Multi_accept: activez le mode de réception multi-connexion et améliorez la capacité de traitement simultané. s

Objectif de Nginx: servir du contenu Web et plus Objectif de Nginx: servir du contenu Web et plus May 08, 2025 am 12:07 AM

Nginxservceswebcontentandactsasareverseproxy, loadBalancer et m /r.1) itefficientlyServisetaticContent likehtmlandimages.2) itfunctionsasareverseproxyandloadBalancer, distribution.

Étapes spécifiques pour configurer l'auto-démarrage du service Nginx Étapes spécifiques pour configurer l'auto-démarrage du service Nginx May 16, 2025 pm 10:39 PM

Les étapes de démarrage de la configuration NGINX sont les suivantes: 1. Créez un fichier de service Systemd: Sutonano / etc / Systemd / System / nginx.service et ajouter des configurations pertinentes. 2. Recharger la configuration SystemD: SudosystemctlDaemon-RELOAD. 3. Activer Nginx pour démarrer automatiquement: SudosystemctLenablenginx. Grâce à ces étapes, Nginx s'exécutera automatiquement au démarrage du système, garantissant la fiabilité et l'expérience utilisateur du site Web ou de l'application.

Dépannage de Nginx: diagnostic et résolution des erreurs communes Dépannage de Nginx: diagnostic et résolution des erreurs communes May 05, 2025 am 12:09 AM

Le diagnostic et les solutions pour les erreurs courantes de Nginx incluent: 1. Afficher les fichiers journaux, 2. Ajuster les fichiers de configuration, 3. Optimiser les performances. En analysant les journaux, en ajustant les paramètres de délai d'expiration et en optimisant le cache et l'équilibrage de la charge, des erreurs telles que 404, 502, 504 peuvent être efficacement résolues pour améliorer la stabilité et les performances du site Web.

Quelles sont les techniques d'optimisation SEO pour Debian Apache2? Quelles sont les techniques d'optimisation SEO pour Debian Apache2? May 28, 2025 pm 05:03 PM

Les compétences d'optimisation du référencement de Debianapache2 couvrent plusieurs niveaux. Voici quelques méthodes clés: Recherche de mots clés: Utilisez des outils (tels que les outils de magie de mots clés) pour exploiter les mots clés du noyau et de la page. Création de contenu de haute qualité: produire un contenu précieux et original, et le contenu doit être effectué des recherches approfondies pour assurer un langage et un format clair. Disposition du contenu et optimisation de la structure: utilisez des titres et des sous-titres pour guider la lecture. Écrivez des paragraphes et des phrases concises et claires. Utilisez la liste pour afficher les informations clés. Combiner multimédia tels que des images et des vidéos pour améliorer l'expression. La conception vierge améliore la lisibilité du texte. Niveau technique Amélioration du référencement: Robots.txt Fichier: Spécifie les droits d'accès des robots des moteurs de recherche. Accélérer le chargement de la page Web: optimisé à l'aide du mécanisme de mise en cache et de la configuration Apache

See all articles