Heim Backend-Entwicklung PHP-Tutorial Nginx-Grundkonzepte – Verbindung

Nginx-Grundkonzepte – Verbindung

Aug 08, 2016 am 09:27 AM
mutex nginx

In Nginx ist die Verbindung eine Kapselung der TCP-Verbindung, einschließlich des verbundenen Sockets, Leseereignisses und Schreibereignisses. Mit der von Nginx gekapselten Verbindung können wir Nginx problemlos für die Abwicklung verbindungsbezogener Angelegenheiten verwenden, z. B. für den Verbindungsaufbau, das Senden und Empfangen von Daten usw. Die Verarbeitung von HTTP-Anfragen in Nginx basiert auf einer Verbindung, sodass Nginx nicht nur als Webserver, sondern auch als Mailserver verwendet werden kann. Natürlich können wir über die von Nginx bereitgestellte Verbindung mit jedem Backend-Dienst umgehen. In Kombination mit dem Lebenszyklus einer TCP-Verbindung werfen wir einen Blick darauf, wie Nginx mit einer Verbindung umgeht. Beim Start von Nginx wird zunächst die Konfigurationsdatei analysiert, um den zu überwachenden Port und die IP-Adresse abzurufen. Anschließend wird im Nginx-Masterprozess zunächst der Überwachungs-Socket initialisiert (Socket erstellen, Addrreuse und andere Optionen festlegen und anbinden). den angegebenen IP-Adressport, dann abhören) und dann mehrere untergeordnete Prozesse austeilen, und dann konkurrieren die untergeordneten Prozesse um die Annahme neuer Verbindungen. An diesem Punkt kann der Client eine Verbindung zu Nginx initiieren. Wenn der Client und der Server über einen Drei-Wege-Handshake eine Verbindung herstellen, akzeptiert ein Unterprozess von Nginx erfolgreich, ruft den Socket der hergestellten Verbindung ab und erstellt dann die Kapselung der Verbindung durch Nginx, dh die Struktur ngx_connection_t. Als nächstes richten Sie die Verarbeitungsfunktionen für Lese- und Schreibereignisse ein und fügen Lese- und Schreibereignisse hinzu, um Daten mit dem Client auszutauschen. Schließlich schließt Nginx oder der Client die Verbindung aktiv. An diesem Punkt wird eine Verbindung beendet. Natürlich kann Nginx auch als Client verwendet werden, um Daten von anderen Servern anzufordern (z. B. dem Upstream-Modul). Zu diesem Zeitpunkt werden auch die mit anderen Servern erstellten Verbindungen in ngx_connection_t gekapselt. Als Client erhält Nginx zunächst eine ngx_connection_t-Struktur, erstellt dann einen Socket und legt die Attribute des Sockets fest (z. B. Nichtblockierung). Fügen Sie dann Lese- und Schreibereignisse hinzu, rufen Sie connect/read/write auf, um die Verbindung aufzurufen, und schließen Sie schließlich die Verbindung und geben Sie ngx_connection_t frei. In Nginx hat jeder Prozess ein maximales Limit für die Anzahl der Verbindungen, das sich vom Systemlimit für fd unterscheidet. Im Betriebssystem können wir über ulimit -n die maximale Anzahl von FDS ermitteln, die ein Prozess öffnen kann, nämlich nofile. Da jede Socket-Verbindung einen FD belegt, wird dadurch auch die maximale Anzahl von Verbindungen unseres Prozesses begrenzt. Dies wirkt sich natürlich auch direkt auf die maximale Anzahl von Parallelitäten aus, die unser Programm unterstützen kann. Wenn der fd aufgebraucht ist, schlägt das Erstellen eines Sockets fehl. Nginx legt die maximale Anzahl der von jedem Prozess unterstützten Verbindungen fest, indem es worker_connectons festlegt. Wenn der Wert größer als nofile ist, beträgt die tatsächliche maximale Anzahl von Verbindungen nofile und Nginx gibt eine Warnung aus. Wenn Nginx implementiert ist, wird es über einen Verbindungspool verwaltet. Jeder Arbeitsprozess verfügt über einen unabhängigen Verbindungspool, und die Größe des Verbindungspools beträgt worker_connections. Was hier im Verbindungspool gespeichert wird, ist eigentlich keine echte Verbindung, sondern lediglich ein Array der ngx_connection_t-Struktur mit der Größe von worker_connections. Darüber hinaus speichert Nginx alle freien ngx_connection_t über eine verknüpfte Liste free_connections. Jedes Mal, wenn eine Verbindung hergestellt wird, wird eine aus der Liste der freien Verbindungen abgerufen. Nach der Verwendung wird sie wieder in die Liste der freien Verbindungen aufgenommen. Hier werden viele Leute die Bedeutung des Parameters worker_connections missverstehen und denken, dass dieser Wert der Maximalwert ist, den Nginx eine Verbindung herstellen kann. Tatsächlich stellt dieser Wert die maximale Anzahl von Verbindungen dar, die von jedem Arbeitsprozess hergestellt werden können. Daher sollte die maximale Anzahl von Verbindungen, die von einem Nginx hergestellt werden können, worker_connections * worker_processes sein. Hier geht es natürlich um die maximale Anzahl von Verbindungen, die bei HTTP-Anforderungen an lokale Ressourcen unterstützt werden können: worker_connections * worker_processes. Wenn HTTP als Reverse-Proxy verwendet wird, beträgt die maximale Anzahl Parallelitäten sollten worker_connections sein. * worker_processes/2. Denn als Reverse-Proxy-Server stellt jede gleichzeitige Verbindung eine Verbindung mit dem Client und eine Verbindung mit dem Back-End-Dienst her, wodurch zwei Verbindungen belegt werden. Nun, wie wir bereits sagten, konkurrieren mehrere inaktive Prozesse um die Verbindung. Es ist leicht zu erkennen, dass dieser Wettbewerb zu Ungerechtigkeit führt. Wenn ein Prozess eine höhere Chance hat, akzeptiert zu werden. Die inaktiven Verbindungen werden bald aufgebraucht sein, wenn nicht im Voraus eine gewisse Kontrolle erfolgt. Wenn eine neue TCP-Verbindung akzeptiert wird, kann die inaktive Verbindung nicht abgerufen und die Verbindung nicht an andere Prozesse übertragen werden, was letztendlich zu diesem TCP führt Die Verbindung kann nicht verarbeitet werden und wird abgebrochen. Das ist offensichtlich unfair. Manche Prozesse haben freie Verbindungen, haben aber keine Chance, diese zu verarbeiten. Manche Prozesse verwerfen künstlich Verbindungen, weil sie keine freien Verbindungen haben. Wie kann man dieses Problem lösen? Erstens muss die Nginx-Verarbeitung zuerst die Option „accept_mutex“ aktivieren. Zu diesem Zeitpunkt fügt nur der Prozess das Accept-Ereignis hinzu. Mit anderen Worten: Nginx steuert, ob der Prozess das Accept-Ereignis hinzufügt. Nginx verwendet eine Variable namens ngx_accept_disabled, um zu steuern, ob um die Accept_mutex-Sperre konkurriert werden soll. Berechnen Sie im ersten Code den Wert von ngx_accept_disabled. Dieser Wert beträgt ein Achtel der Gesamtzahl der Verbindungen in einem einzelnen Nginx-Prozess Die verbleibenden Verbindungen sind kleiner als. Der Wert ist nur dann größer als 0, wenn ein Achtel der Gesamtzahl der Verbindungen vorhanden ist. Je kleiner die Anzahl der verbleibenden Verbindungen ist, desto größer ist der Wert. Wenn Sie sich den zweiten Codeabschnitt ansehen, wird nicht versucht, die Accept_mutex-Sperre zu erhalten, wenn ngx_accept_disabled größer als 0 ist, und ngx_accept_disabled wird um 1 dekrementiert. Daher wird es bei jeder Ausführung hier um 1 dekrementiert, bis es erreicht ist ist kleiner als 0. Das Nichterwerben der Accept_mutex-Sperre ist gleichbedeutend mit dem Verzicht auf die Möglichkeit, die Verbindung zu erhalten. Es ist offensichtlich, dass ngx_accept_disable umso größer ist, je mehr Möglichkeiten es gibt, sodass andere Prozesse die Möglichkeit haben, diese Verbindung zu erhalten Die Sperre wird ebenfalls reduziert. Wenn Sie dies nicht akzeptieren, wird Ihre eigene Verbindung kontrolliert und der Verbindungspool anderer Prozesse verwendet. Auf diese Weise steuert Nginx das Gleichgewicht der Verbindungen zwischen mehreren Prozessen. 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; } } }

Das Obige stellt das Grundkonzept der Nginx-Verbindung vor, einschließlich seiner Aspekte. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So überprüfen Sie die Nginx -Version So überprüfen Sie die Nginx -Version Apr 14, 2025 am 11:57 AM

Die Methoden, die die Nginx -Version abfragen können, sind: Verwenden Sie den Befehl nginx -v; Zeigen Sie die Versionsrichtlinie in der Datei nginx.conf an. Öffnen Sie die Nginx -Fehlerseite und sehen Sie sich den Seitentitel an.

So konfigurieren Sie den Namen des Cloud -Server -Domänennamens in Nginx So konfigurieren Sie den Namen des Cloud -Server -Domänennamens in Nginx Apr 14, 2025 pm 12:18 PM

So konfigurieren Sie einen Nginx -Domänennamen auf einem Cloud -Server: Erstellen Sie einen Datensatz, der auf die öffentliche IP -Adresse des Cloud -Servers zeigt. Fügen Sie virtuelle Hostblöcke in die NGINX -Konfigurationsdatei hinzu, wobei der Hörport, Domänenname und das Root -Verzeichnis der Website angegeben werden. Starten Sie Nginx neu, um die Änderungen anzuwenden. Greifen Sie auf die Konfiguration des Domänennamens zu. Weitere Hinweise: Installieren Sie das SSL -Zertifikat, um HTTPS zu aktivieren, sicherzustellen, dass die Firewall den Verkehr von Port 80 ermöglicht, und warten Sie, bis die DNS -Auflösung wirksam wird.

So überprüfen Sie, ob Nginx gestartet wird So überprüfen Sie, ob Nginx gestartet wird Apr 14, 2025 pm 01:03 PM

So bestätigen Sie, ob Nginx gestartet wird: 1. Verwenden Sie die Befehlszeile: SystemCTL Status Nginx (Linux/Unix), Netstat -ano | FindStr 80 (Windows); 2. Überprüfen Sie, ob Port 80 geöffnet ist; 3. Überprüfen Sie die Nginx -Startmeldung im Systemprotokoll. 4. Verwenden Sie Tools von Drittanbietern wie Nagios, Zabbix und Icinga.

So überprüfen Sie den Namen des Docker -Containers So überprüfen Sie den Namen des Docker -Containers Apr 15, 2025 pm 12:21 PM

Sie können den Namen des Docker -Containers abfragen, indem Sie den Schritten folgen: Alle Container auflisten (Docker PS). Filtern Sie die Containerliste (unter Verwendung des GREP -Befehls). Ruft den Containernamen ab (befindet sich in der Spalte "Namen").

So konfigurieren Sie Nginx in Windows So konfigurieren Sie Nginx in Windows Apr 14, 2025 pm 12:57 PM

Wie konfiguriere ich Nginx in Windows? Installieren Sie NGINX und erstellen Sie eine virtuelle Hostkonfiguration. Ändern Sie die Hauptkonfigurationsdatei und geben Sie die Konfiguration der virtuellen Host ein. Starten oder laden Nginx neu. Testen Sie die Konfiguration und sehen Sie sich die Website an. Aktivieren Sie selektiv SSL und konfigurieren Sie SSL -Zertifikate. Stellen Sie die Firewall selektiv fest, damit Port 80 und 443 Verkehr.

So starten Sie den Nginx -Server So starten Sie den Nginx -Server Apr 14, 2025 pm 12:27 PM

Das Starten eines Nginx-Servers erfordert unterschiedliche Schritte gemäß verschiedenen Betriebssystemen: Linux/UNIX-System: Installieren Sie das NGINX-Paket (z. B. mit APT-Get oder Yum). Verwenden Sie SystemCTL, um einen Nginx -Dienst zu starten (z. B. sudo systemctl start nginx). Windows -System: Laden Sie Windows -Binärdateien herunter und installieren Sie sie. Starten Sie Nginx mit der ausführbaren Datei nginx.exe (z. B. nginx.exe -c conf \ nginx.conf). Unabhängig davon, welches Betriebssystem Sie verwenden, können Sie auf die Server -IP zugreifen

So erstellen Sie Container für Docker So erstellen Sie Container für Docker Apr 15, 2025 pm 12:18 PM

Erstellen Sie einen Container in Docker: 1. Ziehen Sie das Bild: Docker Pull [Spiegelname] 2. Erstellen Sie einen Container: Docker Ausführen [Optionen] [Spiegelname] [Befehl] 3. Starten Sie den Container: Docker Start [Containername]

So starten Sie einen Container von Docker So starten Sie einen Container von Docker Apr 15, 2025 pm 12:27 PM

Startschritte des Docker -Containers: Ziehen Sie das Containerbild: Führen Sie "Docker Pull [Mirror Name]" aus. Erstellen eines Containers: Verwenden Sie "Docker erstellen [Optionen] [Spiegelname] [Befehle und Parameter]". Starten Sie den Container: Führen Sie "Docker Start [Container Name oder ID]" aus. Containerstatus überprüfen: Stellen Sie sicher, dass der Container mit "Docker PS" ausgeführt wird.

See all articles