Originallink: http://cjhust.blog.163.com/blog/static/17582715720124544047608/
1, Datenstruktur
ngx_conf_s
Befehlsparameter, aus der Datei lesen und in dieses Array einfügen
Zeigt auf den Systemparameter ngx_pool_t *pool; //
Speicherpool ngx_pool_t *temp_pool;
Informationen zur Konfigurationsdatei ./conf/main.conf“ ngx_log_t *log; //
Log
, 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
Anweisungsverarbeitungsfunktion char *handler_conf; //
Dies wird in Verbindung mit dem oben genannten handler};
ngx_conf_s als Brücke zwischen Konfigurationsdateien und Systemparametern. typedef struct {
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);
HTTP
ctx
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 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 = 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,配置结构体,prev是main的配置结构体,conf是server的配置结构体;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,则将server的enable=main的enable=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 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() NULL }, ngx_null_command }; , häufig verwendete Funktionen
5.1 Verarbeitung Anfrage
ngx_http_get_module_main_conf Funktionsfunktion: Gemäß Anfrage Anfrage und Modul erhalten HauptKonfiguration . Funktion: Gemäß AnfrageAnfragen und Module werden Server konfiguriert. #define ngx_http_get_module_srv_conf(r, module) (r)->srv_conf[module.ctx_index] 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 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 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
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]
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.
(r)-&g t;main_conf[ Modul .ctx_index]
ngx_http_get_module_srv_conf
ngx_http_get_module_loc_conf
ngx_http_conf_get_module_main_conf
Funktionsfunktion:
Funktionsfunktion: Gemäß
conf

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.

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.

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.

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.

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.

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.

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.

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.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

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 neueste Version

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
Chinesische Version, sehr einfach zu bedienen

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.