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:
|
<<: Detaillierte Analyse der Syntax von Mysql-Updates zum Ändern mehrerer Felder und
>>: Auszeichnungssprachen – Nochmal auflisten
Inhaltsverzeichnis 1. Master-Slave-Synchronisatio...
Inhaltsverzeichnis Vorwort Schwierigkeit Domänenü...
In diesem Artikel wird der spezifische Code für J...
Um den Märtyrern und Opfern des Kampfes gegen die...
In diesem Artikel wird der detaillierte Vorgang z...
Automatische Sicherung der MySQL-Datenbank per Sh...
Fehler: Connection to blog0@localhost failed. [08...
Jetzt ist .net Core plattformübergreifend und jed...
Wenn wir den Quellcode einer normalen Website öff...
Inhaltsverzeichnis 1. Ressourcen-Download 2. Entp...
1. Prüfen Sie, ob Port 80 belegt ist. Normalerwei...
Der vollständige Code lautet wie folgt : HTML Quel...
Inhaltsverzeichnis 1. MySQL-Datenstruktur 2. Die ...
Einfaches XHTML-Webformular im Webdesign 5. Techn...
Verstehe das Vielleicht haben Sie this in anderen...