suchen
HeimBackend-EntwicklungPHP-TutorialZusammensetzung des Nginx-HTTP-Moduls

Originallink: http://cjhust.blog.163.com/blog/static/17582715720124544047608/

1, Datenstruktur

ngx_conf_s

struct ngx_conf_s {

char *name; ngx_array_t *args; //

Befehlsparameter, aus der Datei lesen und in dieses Array einfügen

ngx_cycle_t *cycle; //

Zeigt auf den Systemparameter ngx_pool_t *pool; //

Speicherpool ngx_pool_t *temp_pool;

ngx_conf_file_t *conf_file; //

Informationen zur Konfigurationsdatei ./conf/main.conf“ ngx_log_t *log; //

Log

void *ctx; *ctx; //(void ****)cycle->conf_ctx

, installiert für alle Module Konfigurationsinformationen ngx_uint_t module_type;

//Der Modultyp, der die aktuelle Anweisung behandelt ngx_uint_t

Der Befehlstyp, der diese Anweisung verarbeitet

ngx_conf_handler_pt handler; //

Anweisungsverarbeitungsfunktion char *handler_conf; //

Dies wird in Verbindung mit dem oben genannten handler};

Hinweis: Diese Struktur wird hauptsächlich verwendet Konfiguration lesen Zu diesem Zeitpunkt fungiert

ngx_conf_s als Brücke zwischen Konfigurationsdateien und Systemparametern. typedef struct {

void **main_conf;

void **srv_conf;

void **loc_conf;

} ngx_http_conf_ctx_t;

Bemerkungen : Die Konfigurationsstruktur im HTTP-Block ist hauptsächlich in 3, Hauptserver, Server{}, Standort{}. typedef struct {

ngx_int_t (*preconfiguration)(ngx_conf_t *cf);

ngx_int_t (*postconfiguration)(ngx_conf_t *cf);

void *( * create_main_conf)(ngx_conf_t *cf);

char *(*init_main_conf)(ngx_conf_t *cf, void *conf);

void *(*create_srv_conf)(ngx_conf_t *cf);

char *(*merge_srv_conf)(ngx_conf_t *cf, void *prev, void *conf);

void *(*create_loc_conf)(ngx_conf_t *cf);

char *(*merge_loc_conf ) (ngx_conf_t *cf, void *prev, void *conf);

} ngx_http_module_t;

Bemerkungen:

HTTP

ctxenthält hauptsächlich die oben genannten

8 Funktionen. ngx_command_sstruct ngx_command_s { ngx_str_t name;

ngx_uint_t type; char                                             cf, ngx_command_t *cmd, void * conf);

ngx_uint_t conf;

ngx_uint_t offset;

void ngx_null_string , 0, NULL, 0, 0, NULL }

2, HTTP ctx

2.1 create_main_conf(ngx_conf_t *cf)

Parameter: ngx_conf_t *cf, Konfigurationsstruktur; >Rückgabewert: void *

; Hinweis: Der Rückgabewert von kann als

ngx_http_conf_get_module_main_conf und gx_http zurückgegeben werden _get_module_ main _conf Ergebnisse; > ngx_http_barrier_conf_t *conf; //Eine benutzerdefinierte Struktur

conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_barrier_conf_t )); //init by pcalloc if (conf == NULL) {

return NULL;

}

conf->enable = NGX_CONF_UNSET;

return conf; 🎜>

2.2 create_srv_conf(ngx_conf_t *cf)

Parameter:

ngx_conf_t * cf

, Konfigurationsstruktur;

Rückgabewert: void *; 🎜>ngx_http_conf_get_module_srv_conf

und

gx_http Das Ergebnis von _get_module_ srv_conf; 🎜>static void * ngx_http_barrier_create_conf(ngx_conf_t *cf)

{ ngx_http_barrier_conf_t * conf; //Eine benutzerdefinierte Struktur

conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_barrier_conf_t) ); //init by pcalloc if (conf == NULL) { return NULL;

} conf->enable = NGX_CONF_UNSET; return conf; 🎜>2.3 create_loc_conf(ngx_conf_t *cf)

Parameter: ngx_conf_t *cf

, Konfigurationsstruktur; 🎜>

Rückgabewert:

void *

;>ngx_http_conf_get_module_loc_conf und

gx_http Das Ergebnis von _get_module_loc_conf

;>

static void * ngx_http_barrier_create_conf(ngx_conf_t *cf)

{

ngx_http_barrier_conf_t *conf ; //

Eine benutzerdefinierte Struktur

conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_barrier_conf_t)); //init by pcalloc

if (conf == NULL) {

return NULL;

}

conf ->enable = NGX_CONF_UNSET;

return conf; 🎜>2.4 Vorkonfiguration (ngx_conf_t *cf)

Parameter:

ngx_conf_t *cf, Konfigurationsstruktur;

Rückgabewert: ngx_int_t;

Hinweis: Der Rückgabewert ist nur Wird als Beurteilung verwendet, ob die Operation korrekt ist >static ngx_int_tngx_http_ssl_add_variables(ngx_conf_t *cf)

{ ngx_http_variable_t *var, *v;

for (v = ngx_http_ssl_vars; v->name.len; v++) {

var = ngx_http_add_variable(cf, &v->name, v->flags);

if (var == NULL) {

return NGX_ERROR;

}

var->get_handler = v->get_handler;

var->data = v-> ;data;

}

return NGX_OK;

}

2.5 init_main_conf(ngx_conf_t *cf, void *conf)

Parameter:

ngx_conf_t *cf

und

conf

,

conf ist der Rückgabewert, wenn create_main

hier als Parameter verwendet wird; >Rückgabewert: char *, NGX_CONF_OK zeigt Erfolg an; Bemerkungen: Der Rückgabewert wird nur als Beurteilung verwendet, ob der Vorgang ausgeführt wurde ist richtig;

Beispiel: static char *ngx_http_core_init_main_conf(ngx_conf_t *cf, void *conf){

ngx_http_core_main_conf_t *cmcf = conf;//create_main ist nicht konfiguriert, wenn

if (cmcf->server_names_hash_max_size == NGX_CONF_UNSET_UINT) {

cmcf->server_names_hash_max_ size = 512; / /

Hier ist init

}

if (cmcf->server_names_hash_bucket_size == NGX_CONF_UNSET_UINT) {

cmcf->server_names_hash_bucket_size = ng x_cacheline_size;

}

cmcf->server_names_hash_bucket_size =

            ngx_align(cmcf->server_names_hash_bucket_size, ngx_cacheline_size);

 

 

    if (cmcf->variables_hash_max_size == NGX_CONF_UNSET_UINT) {

        cmcf->variables_hash_max_size = 512;

    }

 

    if (cmcf->variables_hash_bucket_size == NGX_CONF_UNSET_UINT) {

        cmcf-> Variables_hash_bucket_size = 64;

    }

 

    cmcf->variables_hash_bucket_size =

               ngx_align(cmcf->variables_hash_bucket_size, ngx_cacheline_size);

 

    if (cmcf-> ncaptures) {

        cmcf->ncaptures = (cmcf->ncaptures + 1) * 3;

    }

 

    return NGX_CONF_OK;

}

2.6 merge_srv_conf(ngx_conf_t *cf, void *prev, void *conf)

参数:ngx_conf_t *cf,配置结构体,prevmain的配置结构体,confserver的配置结构体;prev =cf->ctx.srv_conf[ctx_index],c/span>

返回值:char *,正确返回值是NGX_CONF_OK

备注:返回值只是作为操作是否正确的一个判断;

示例:

statisches Zeichen * ngx_http_barrier_merge_conf(ngx_conf_t *cf, void *parent, void *child)

{

  ngx_http_barrier_conf_t *prev = parent;

  ngx_http_barrier_conf_t *conf = child;

 

if (conf->shm_zone == NULL){

     *conf = *prev;

  }

 

  ngx_conf_merge_value(conf->enable, prev->enable, 0);  //Standard ist 0

  return NGX_CONF_OK;

}

备注: Merge-Server的主要功能是,如果main里配置了enable=1,而server{}enable= NGX_CONF_UNSET,则将serverenable=mainenable=1

2.7 merge_loc_conf(ngx_conf_t *cf, void *prev, void *conf)

原理同merge_srv_conf(ngx_conf_t *cf, void *prev, void *conf)

2.8 postconfiguration(ngx_conf_t *cf)

参数:ngx_conf_t *cf

返回值:ngx_int_t,正确返回值是NGX_OK

备注:返回值只是作为操作是否正确的一个判断;

示例:

static ngx_int_t ngx_http_tracker_init(ngx_conf_t *cf)

{

ngx_tracker_flag = 0;

return NGX_OK;

}

Hinweis: globale Variablen ersetzen Das Flag wird gelöscht, um festzustellen, ob ein Barriere-Modul vorhanden ist. Wenn es nicht gelöscht wird, führt dies dazu, dass in der Konfiguration keine Barriere hinzugefügt wird. Zone, wenn kill –HUP, weil sich der Wert der globalen Variablen flag nicht ändert , es ist nicht 0, Wenn der Benutzer den Befehl traker ausführt, Es tritt ein Segfault auf. HTTP Befehle

4, häufig verwendete Variablen

#define NGX_HTTP_MAIN_CONF 0x02000000 //

Befehlsspeicherort# definiere NGX_HTTP_SRV_CONF 0x04000000

#define NGX_HTTP_LOC_CONF 0x08000000#define NGX_HTTP_UP S_CONF 0x10000000#define NGX_HTTP_SIF_CONF 0x20000000

#define NGX_HTTP_LIF_CONF 0x40000000

#define NGX_HTTP_LMT_CONF. 0x80000000

#define NGX_HTTP_MAIN_CONF_OFFSET offsetof(ngx_http_conf_ctx_t, main_conf)

#define NGX_HTTP_SRV_CONF_OFFSET offsetof(ngx_http_conf_ctx_t, srv_conf)

#define NGX_HTTP_LOC_CONF_OFFSET offsetof(ngx_http_conf_ctx_t, loc_conf)

Beispiel:

static ngx_command_t ngx_http_print_commands[] = {

{

ngx_string("print"), NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,

ngx_http_print_setup, ngx_http_print_setup, 🎜>        //set()

, konvertiert die übergebenen Parameter Führen Sie den Lesebefehl aus und speichern Sie den entsprechenden Wert in der Konfigurationsstruktur , ed),

NULL

},

ngx_null_command

};

5

, häufig verwendete Funktionen

5.1

Verarbeitung

Anfrage

ngx_http_get_module_main_conf

Funktionsfunktion: Gemäß Anfrage

Anfrage und Modul erhalten HauptKonfiguration .

#define ngx_http_get_module_main_conf(r, module) 

(r)-&g t;main_conf[ Modul .ctx_index]

ngx_http_get_module_srv_conf

Funktion: Gemäß AnfrageAnfragen und Module werden Server konfiguriert.

#define ngx_http_get_module_srv_conf(r, module) (r)->srv_conf[module.ctx_index]

ngx_http_get_module_loc_conf

Funktionsfunktion: Gemäß AnfrageAnfragen und Module werden Standort konfiguriert.

#define ngx_http_get_module_loc_conf(r, module) (r)->loc_conf[module.ctx_index]

5.2 Parsingconf

ngx_http_conf_get_module_main_conf

Funktionsfunktion: Gemäß conf Strukturen und Module werden main konfiguriert.

#define ngx_http_conf_get_module_main_conf(cf, module) ctx_t *) cf-> ctx)->main_conf[module.ctx_index]

ngx_http_conf_get_module_srv_conf

Funktionsfunktion:

Gemäß conf Struktur und Modul, wir erhalten Server Konfiguration. #define ngx_http_conf_get_module_srv_conf(cf, module) _conf_ctx_t *) cf-> ctx)->srv_conf[module.ctx_index]

ngx_http_conf_get_module_loc_conf

Funktionsfunktion: Gemäß

conf

Struktur und Modul, Standort Konfiguration abrufen. #define ngx_http_conf_get_module_loc_conf(cf, module) conf_ctx_t *) cf-> ctx)->loc_conf[module.ctx_index]

5.3 Zyklus

ngx_http_cycle_get_module_main_conf

#define ngx_http_cycle_get_module_main_conf(cycle, module) 🎜> (cycle->conf_ctx [ngx_http_module.index] ? 🎜>

     —>main_conf [module.ctx_index]:                                                                                                                                     🎜> Das Obige stellt die Zusammensetzung des Nginx-HTTP-Moduls einschließlich einiger Aspekte des Inhalts vor. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Stellungnahme
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
Wann würden Sie ein Merkmal gegenüber einer abstrakten Klasse oder Schnittstelle in PHP verwenden?Wann würden Sie ein Merkmal gegenüber einer abstrakten Klasse oder Schnittstelle in PHP verwenden?Apr 10, 2025 am 09:39 AM

In PHP eignet sich das Merkmal für Situationen, in denen die Wiederverwendung von Methoden erforderlich ist, aber nicht zur Erbschaft geeignet ist. 1) Das Merkmal ermöglicht Multiplexing -Methoden in Klassen, um die Komplexität mehrerer Vererbungskomplexität zu vermeiden. 2) Bei Verwendung von Merkmalen müssen Sie auf Methodenkonflikte achten, die durch die Alternative und als Schlüsselwörter gelöst werden können. 3) Überbeanspruchte des Merkmals sollte vermieden werden und seine einzelne Verantwortung sollte beibehalten werden, um die Leistung zu optimieren und die Code -Wartbarkeit zu verbessern.

Was ist ein Abhängigkeitsinjektionsbehälter (DIC) und warum eine in PHP verwenden?Was ist ein Abhängigkeitsinjektionsbehälter (DIC) und warum eine in PHP verwenden?Apr 10, 2025 am 09:38 AM

Abhängigkeitsinjektionsbehälter (DIC) ist ein Tool, das Objektabhängigkeiten für die Verwendung in PHP -Projekten verwaltet und bereitstellt. Die Hauptvorteile von DIC sind: 1. Entkopplung, Machen von Komponenten unabhängig, und der Code ist leicht zu warten und zu testen; 2. Flexibilität, leicht zu ersetzen oder zu ändern; 3.. Testbarkeit, bequem für die Injektion von Scheinobjekten für Unit -Tests.

Erklären Sie die SPLFixedArray und seine Leistungseigenschaften im Vergleich zu regulären PHP -Arrays.Erklären Sie die SPLFixedArray und seine Leistungseigenschaften im Vergleich zu regulären PHP -Arrays.Apr 10, 2025 am 09:37 AM

SplfixedArray ist ein Array mit fester Größe in PHP, das für Szenarien geeignet ist, in denen hohe Leistung und geringe Speicherverbrauch erforderlich sind. 1) Es muss die Größe beim Erstellen angeben, um den durch dynamischen Einstellungen verursachten Overhead zu vermeiden. 2) Basierend auf C -Spracharray betreibt direkt Speicher und schnelle Zugriffsgeschwindigkeit. 3) Geeignet für eine großräumige Datenverarbeitung und speicherempfindliche Umgebungen, muss jedoch mit Vorsicht verwendet werden, da seine Größe festgelegt ist.

Wie kann PHP -Datei sicher sicher hochladen?Wie kann PHP -Datei sicher sicher hochladen?Apr 10, 2025 am 09:37 AM

PHP überlädt Datei -Hochladen über die Variable $ \ _ Dateien. Zu den Methoden zur Sicherstellung gehören: 1. Upload -Fehler, 2. Dateityp und -größe überprüfen, 3.. Dateiüberschreibung verhindern, 4. Verschieben von Dateien auf einen dauerhaften Speicherort.

Was ist der Null -Koalescing -Operator (??) und der Null -Koalescing -Zuweisungsoperator (?? =)?Was ist der Null -Koalescing -Operator (??) und der Null -Koalescing -Zuweisungsoperator (?? =)?Apr 10, 2025 am 09:33 AM

In JavaScript können Sie NullCoalescingoperator (??) und NullCoalescingAssignmentoperator (?? =) verwenden. 1.??? 2.??= Weisen Sie den Wert des rechten Operanden die Variable zu, jedoch nur, wenn die Variable null oder undefiniert ist. Diese Operatoren vereinfachen die Codelogik und verbessern die Lesbarkeit und Leistung.

Was ist CSP -Header (Content Security Policy Ricture) und warum ist es wichtig?Was ist CSP -Header (Content Security Policy Ricture) und warum ist es wichtig?Apr 09, 2025 am 12:10 AM

CSP ist wichtig, da es XSS -Angriffe verhindern und das Laden der Ressourcen begrenzen und die Sicherheit der Website verbessern kann. 1.CSP ist Teil von HTTP -Reaktionsüberschriften und begrenzt böswilliges Verhalten durch strenge Richtlinien. 2. Die grundlegende Verwendung besteht darin, nur Laderessourcen aus demselben Ursprung zuzulassen. 3. Erweiterte Verwendung kann mehr feinkörnige Strategien festlegen, z. V.

Was sind HTTP -Anforderungsmethoden (erhalten, posten, setzen, löschen usw.) und wann sollte jeder verwendet werden?Was sind HTTP -Anforderungsmethoden (erhalten, posten, setzen, löschen usw.) und wann sollte jeder verwendet werden?Apr 09, 2025 am 12:09 AM

Zu den HTTP -Anforderungsmethoden gehören GET, Post, Put und Löschen, mit denen Ressourcen erhalten, übermittelt, aktualisiert und gelöscht werden. 1. Die GET -Methode wird verwendet, um Ressourcen zu erhalten, und eignet sich für Lesevorgänge. 2. Die Post -Methode wird verwendet, um Daten zu übermitteln und häufig neue Ressourcen zu erstellen. 3. Die Put -Methode wird zum Aktualisieren von Ressourcen verwendet und eignet sich für vollständige Updates. V.

Was ist HTTPS und warum ist es für Webanwendungen von entscheidender Bedeutung?Was ist HTTPS und warum ist es für Webanwendungen von entscheidender Bedeutung?Apr 09, 2025 am 12:08 AM

HTTPS ist ein Protokoll, das auf der Grundlage von HTTP eine Sicherheitsschicht hinzufügt, die hauptsächlich die Privatsphäre und die Datensicherheit der Benutzer durch verschlüsselte Daten schützt. Zu den Arbeitsprinzipien gehören TLS -Handshake, Zertifikatüberprüfung und verschlüsselte Kommunikation. Bei der Implementierung von HTTPS müssen Sie auf Zertifikatverwaltung, Leistungsauswirkungen und Mischinhalteprobleme achten.

See all articles

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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.