So bearbeiten Sie Anfragen mit Nginx

(*-*)浩
Freigeben: 2019-11-27 15:22:41
Original
2566 Leute haben es durchsucht

So bearbeiten Sie Anfragen mit Nginx

Nginx verwendet ein Multiprozessmodell zur Bereitstellung externer Dienste, einschließlich eines Masterprozesses und mehrerer Workerprozesse. Der Master-Prozess ist für die Verwaltung von Nginx selbst und anderen Worker-Prozessen verantwortlich.

Die gesamte eigentliche Geschäftsverarbeitungslogik befindet sich im Worker-Prozess. Im Arbeitsprozess gibt es eine Funktion, die eine Endlosschleife ausführt und die vom Client empfangenen Anforderungen kontinuierlich verarbeitet, bis der gesamte Nginx-Dienst gestoppt wird. (Empfohlenes Lernen: nginx verwendet ) Im

Worker-Prozess ist die Funktion ngx_worker_process_cycle() die Verarbeitungsfunktion für diese Endlosschleife.

In dieser Funktion ist der einfache Verarbeitungsablauf einer Anfrage wie folgt:

Der vom Betriebssystem bereitgestellte Mechanismus (z. B. Epoll, Kqueue usw.) generiert verwandte Ereignisse.

Empfangen und verarbeiten Sie diese Ereignisse. Wenn Daten empfangen werden, wird ein übergeordnetes Anforderungsobjekt generiert.

Verarbeiten Sie den Header und den Text der Anfrage.

Erzeugt eine Antwort und sendet sie an den Kunden zurück.

Vollständige Bearbeitung der Anfrage.

Timer und andere Ereignisse neu initialisieren.

Ablauf der Anforderungsverarbeitung

Damit jeder den Anforderungsverarbeitungsprozess in Nginx besser verstehen kann, nehmen wir eine HTTP-Anfrage als Beispiel, um sie im Detail zu erläutern.

In Nginx umfasst die Verarbeitung einer HTTP-Anfrage die folgenden Phasen.

HTTP-Anfrage initialisieren (Daten vom Client lesen und HTTP-Anfrageobjekt generieren, das alle Informationen der Anfrage enthält).

Anforderungsheader verarbeiten.

Verarbeiten Sie den Anfragetext.

Rufen Sie ggf. den mit dieser Anfrage verknüpften Handler (URL oder Standort) auf.

Rufen Sie jeden Phasenhandler nacheinander zur Verarbeitung auf.

Hier müssen wir das Konzept des Phasenhandlers verstehen. Phase bedeutet wörtlich Bühne. Damit Phasenhandler leicht verständlich sind, handelt es sich um Handler, die mehrere Verarbeitungsstufen enthalten.

In jeder Phase gibt es mehrere Handler. Wenn die Verarbeitung eine bestimmte Phase erreicht, werden die Handler dieser Phase nacheinander aufgerufen, um die HTTP-Anfrage zu verarbeiten.

Normalerweise verarbeitet ein Phasenhandler diese Anfrage und erzeugt eine Ausgabe. Normalerweise ist ein Phasenhandler einem in einer Konfigurationsdatei definierten Speicherort zugeordnet.

Ein Phasenhandler führt normalerweise die folgenden Aufgaben aus:

Standortkonfiguration abrufen.

Erzeugt eine angemessene Reaktion.

Antwortheader senden.

Antworttext senden.

Wenn Nginx den Header einer HTTP-Anfrage liest, sucht Nginx zunächst nach der Konfiguration des mit der Anfrage verknüpften virtuellen Hosts. Wenn die Konfiguration dieses virtuellen Hosts gefunden wird, durchläuft diese HTTP-Anfrage normalerweise die folgenden Verarbeitungsphasen (Phasenhandler):

NGX_HTTP_POST_READ_PHASE: Phase zum Lesen des Anforderungsinhalts

NGX_HTTP_SERVER_REWRITE_PHASE: Phase zum Umschreiben der Adresse der Serveranforderung

NGX_HTTP_FIND_CONFIG_PHASE: Phase der Konfigurationssuche:

NGX_HTTP_REWRITE_PHASE: Phase zum Umschreiben der Adresse der Standortanforderung

NGX_HTTP_POST_REWRITE_P HASE: Übermittlungsphase zum Umschreiben der Anforderung der Adresse

NGX_HTTP_PREACCESS_PHASE: Vorbereitungsphase der Zugriffsberechtigungsprüfung

NGX_HTTP_ACCESS_PHASE: Phase der Zugriffsberechtigungsprüfung

NGX_HTTP_POST_ACCESS_PHASE: Übermittlungsphase der Zugriffsberechtigungsprüfung

NGX_HTTP_TRY_FILES_ PHASE: Konfigurationselement try_files Verarbeitungsphase

NGX_HTTP_CONTENT_PHASE: Phase der Inhaltsgenerierung

NGX_HTTP_LOG_PHASE: Phase der Verarbeitung des Protokollmoduls

In der Phase der Inhaltsgenerierung muss Nginx diese Anfrage senden, um eine korrekte Antwort auf eine Anfrage zu generieren Übergeben Sie es an einen geeigneten Inhaltshandler, um es zu verarbeiten.

Wenn der dieser Anforderung entsprechende Standort explizit als Inhaltshandler in der Konfigurationsdatei angegeben ist, kann Nginx den entsprechenden Handler direkt finden, indem er den Standort abgleicht, und die Anforderung zur Bearbeitung an den Inhaltshandler übergeben. Zu diesen Konfigurationsanweisungen gehören Perl, FLV, Proxy_Pass, MP4 usw.

Wenn der Standort, der einer Anfrage entspricht, nicht direkt über einen konfigurierten Inhaltshandler verfügt, versucht Nginx der Reihe nach:

Wenn für einen Standort random_index konfiguriert ist, dann Wählen Sie zufällig eine Datei aus, die an den Client gesendet wird.

Wenn eine Indexanweisung an einem Standort konfiguriert ist, wird die durch die Indexanweisung angegebene Datei an den Client gesendet.

Wenn die automatische Indizierung an einem Standort konfiguriert ist, wird die Dateiliste unter dem Serverpfad, der der Anforderungsadresse entspricht, an den Client gesendet.

Wenn gzip_static on an dem Speicherort eingestellt ist, der dieser Anfrage entspricht, prüfen Sie, ob eine entsprechende .gz-Datei vorhanden ist, und senden Sie diese in diesem Fall an den Client (sofern der Client gzip unterstützt).

Wenn der angeforderte URI einer statischen Datei entspricht, sendet das statische Modul den Inhalt der statischen Datei an den Client.

Nach Abschluss der Inhaltsgenerierungsphase wird die generierte Ausgabe zur Verarbeitung an das Filtermodul übergeben.

Das Filtermodul ist auch standortbezogen. Alle Monteurmodule sind in einer Kette organisiert. Die Ausgabe durchläuft nacheinander alle Filter, bis ein Rückgabewert vom Filtermodul angibt, dass die Verarbeitung abgeschlossen ist.

Hier sind einige gängige Filtermodule, zum Beispiel:

serverseitige Includes.

XSLT-Filterung.

Bildskalierung und dergleichen.

gzip-Komprimierung.

Unter allen Filtern gibt es mehrere Filtermodule, die Aufmerksamkeit erfordern. Die Anweisungen lauten wie folgt in der Reihenfolge der Aufrufe:

write: Ausgabe an den Client schreiben, tatsächlich in den Socket schreiben, der der Verbindung entspricht.

Verschieben: Dieser Filter ist für Unteranfragen, also Unteranfragen, verantwortlich.

Kopieren: Kopieren Sie einige Puffer (Dateien oder Speicher), die kopiert werden müssen, und übergeben Sie sie dann zur Verarbeitung an den verbleibenden Körperfilter.

Das obige ist der detaillierte Inhalt vonSo bearbeiten Sie Anfragen mit Nginx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage