Heim > Artikel > Backend-Entwicklung > Zusammensetzung des Nginx-HTTP-Moduls
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