Detaillierte Analyse jeder Phase der HTTP-Anforderungsverarbeitung von Nginx

Detaillierte Analyse jeder Phase der HTTP-Anforderungsverarbeitung von Nginx

Beim Schreiben des HTTP-Moduls von nginx müssen die HTTP-Anforderungen in jeder Phase entsprechend verarbeitet werden, um unterschiedliche Zwecke zu erreichen, z. B. ob beim Initiieren der Anforderung eine Zugriffsberechtigung vorliegt, ob beim Generieren des Inhalts eine Filterung oder andere Verarbeitung erfolgt usw. Wenn die im kompilierten Nginx-Modul eingetragene Verarbeitungsphase nicht korrekt ist, kann es sein, dass das gewünschte Ergebnis nicht erreicht wird. Beispielsweise ist der zu verarbeitende Inhalt zu diesem Zeitpunkt tatsächlich nicht verfügbar usw.

In nginx werden mehrere Phasentypen definiert, um unterschiedliche Verarbeitungsanforderungen zu erfüllen (in ngx_http_core_module.h sind verschiedene Versionen unterschiedlich):

Typdefinition Aufzählung {
 NGX_HTTP_POST_READ_PHASE = 0,
 
 NGX_HTTP_SERVER_REWRITE_PHASE,
 
 NGX_HTTP_FIND_CONFIG_PHASE,
 NGX_HTTP_REWRITE_PHASE,
 NGX_HTTP_POST_REWRITE_PHASE,
 
 NGX_HTTP_PREACCESS_PHASE,
 
 NGX_HTTP_ACCESS_PHASE,
 NGX_HTTP_POST_ACCESS_PHASE,
 
 NGX_HTTP_TRY_FILES_PHASE,
 NGX_HTTP_CONTENT_PHASE,
 
 NGX_HTTP_LOG_PHASE
} ngx_http_phases;

Die entsprechenden Bedeutungen sind:

NGX_HTTP_POST_READ_PHASE = 0 // Anforderungsphase lesen NGX_HTTP_SERVER_REWRITE_PHASE // URI-Konvertierungsphase NGX_HTTP_FIND_CONFIG_PHASE // Entsprechende Konfiguration suchen, um die Phase auszuführen NGX_HTTP_REWRITE_PHASE // URI-Konvertierungsphase (hier nicht ganz klar)
NGX_HTTP_POST_REWRITE_PHASE //Phase der Verarbeitung des konvertierten URL-Ergebnisses NGX_HTTP_PREACCESS_PHASE //Phase der Vorbereitung der Berechtigungsprüfung NGX_HTTP_ACCESS_PHASE //Phase der Berechtigungsprüfung NGX_HTTP_POST_ACCESS_PHASE //Phase der Verarbeitung des Ergebnisses der Berechtigungsprüfung NGX_HTTP_TRY_FILES_PHASE //Verarbeitung der Try_Files-Phase in der Konfiguration NGX_HTTP_CONTENT_PHASE //Phase der Verarbeitung der generierten Rückgabedaten (wird hier nicht zu detailliert betrachtet, Filter können natürlich ignoriert werden)
NGX_HTTP_LOG_PHASE // Notieren Sie die Protokollverarbeitungsphase, die nach Abschluss der Anforderung und beim Schließen der Anforderung verarbeitet werden soll

Anhand dieser Konfiguration können wir den gesamten Prozess von nginx bei der Verarbeitung von Anfragen analysieren. Der Prozess wird von Anfang bis Ende ausgeführt. Es ist ersichtlich, dass LOG am Ende ausgeführt wird. Die Verarbeitung von Inhaltssegmenten erfolgt im Allgemeinen im Filtermodul. Das im Stadium NGX_HTTP_LOG_PHASE registrierte Verarbeitungssegment kann die zurückgegebenen Daten nicht abrufen. Die zurückgegebenen Daten werden direkt freigegeben, nachdem sie an den Client gesendet wurden. Daher sollte bei der Verarbeitung jeder Phase der Datenvorbereitungsstatus jeder Phase klar sein.

Normalerweise können wir unser eigenes Verarbeitungsmodul folgendermaßen registrieren:

statisches ngx_int_t
ngx_http_xxx_init(ngx_conf_t *cf)
{
 ngx_http_handler_pt *h;
 ngx_http_core_main_conf_t *cmcf;
 
 cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
 
 h = ngx_array_push(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers);
 wenn (h == NULL) {
 gib NGX_ERROR zurück;
 }
 
 *h = ngx_http_xxx_handler;
 
 gib NGX_OK zurück;
}

Und der Rückgabewert von ngx_http_xxx_up_handler kann nur der folgende sein:

NGX_OK //Verarbeitung erfolgreich, gehe zur nächsten StufeNGX_DECLINED //Verarbeitung abbrechenNGX_AGAIN || NGX_DONE //Verarbeitung abgeschlossen, die Rückgabe dieses Wertes löst eine Anfrage ausNGX_ERROR || NGX_HTTP_.. //Verarbeitungsfehler oder andere Statuswerte von HTTP

Darüber hinaus gibt es für die Phase NGX_HTTP_CONTENT_PHASE tatsächlich eine weitere Möglichkeit zur Registrierung, und zwar so:

statisches Zeichen *
ngx_http_xxx_server(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
 ngx_str_t *Wert;
 ngx_url_t u;
 ngx_http_core_loc_conf_t *clcf;
 
 clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
 
 clcf->handler = ngx_http_xxx_handler;
 
 wenn (clcf->name.data[clcf->name.len - 1] == '/') {
 clcf->auto_redirect = 1;
 }
 
 gib NGX_CONF_OK zurück;
}

Auf diese Weise müssen Sie jedoch zu viel tun. In den meisten Fällen müssen Sie eine Upstream-Integration oder eine spezielle Verarbeitung von Anforderungen in Betracht ziehen. Bei der verteilten Speicherverteilung ist es beispielsweise erforderlich, die Anforderungsverarbeitung mit dem Dateisystem zu verknüpfen, z. B. indem die angeforderten Daten direkt an einen speziellen SERVER übergeben werden, um den Inhalt abzurufen. hehe.

Damit ist dieser Artikel über die detaillierte Analyse jeder Phase der HTTP-Anforderungsverarbeitung von nginx abgeschlossen. Weitere Informationen zur HTTP-Anforderungsverarbeitung von nginx finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Nginx implementiert ein Codebeispiel für die https-Websitekonfiguration
  • Detailliertes Tutorial zur Konfiguration von Nginx für https-verschlüsselten Zugriff
  • Implementierung der Nginx-Domänennamenweiterleitung für den HTTPS-Zugriff
  • Alibaba Cloud Nginx konfiguriert https, um ein Domänennamen-Zugriffsprojekt zu implementieren (grafisches Tutorial)
  • Nginx konfiguriert denselben Domänennamen, um sowohl den http- als auch den https-Zugriff zu unterstützen
  • Detaillierte Konfiguration von Nginx, das sowohl Http als auch Https unterstützt
  • Verwenden Sie nginx + sekundären Domänennamen + https-Unterstützung
  • Nginx übernimmt die Analyse des Implementierungsprozesses für HTTP-Anforderungen

<<:  Detaillierte Analyse der Syntax von Mysql-Updates zum Ändern mehrerer Felder und

>>:  Auszeichnungssprachen – Nochmal auflisten

Artikel empfehlen

Prinzip und Anwendung der MySQL-Master-Slave-Synchronisation

Inhaltsverzeichnis 1. Master-Slave-Synchronisatio...

Nginx löst Cross-Domain-Probleme und bindet Seiten von Drittanbietern ein

Inhaltsverzeichnis Vorwort Schwierigkeit Domänenü...

JavaScript-Canvas zum Erzielen eines Spiegelbildeffekts

In diesem Artikel wird der spezifische Code für J...

Zusammenfassung eines CSS-Codes, der die gesamte Site grau macht

Um den Märtyrern und Opfern des Kampfes gegen die...

Automatische Sicherung der MySQL-Datenbank per Shell-Skript

Automatische Sicherung der MySQL-Datenbank per Sh...

Implementierung der Ausführung von SQL Server mit Docker

Jetzt ist .net Core plattformübergreifend und jed...

HTML-Versionsdeklaration DOCTYPE-Tag

Wenn wir den Quellcode einer normalen Website öff...

5 einfache XHTML-Webformulare für Webdesign

Einfaches XHTML-Webformular im Webdesign 5. Techn...

Was ist dies in einer Punkt-für-Punkt-Reihe von JavaScript?

Verstehe das Vielleicht haben Sie this in anderen...