Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammensetzung des Nginx-HTTP-Moduls

Zusammensetzung des Nginx-HTTP-Moduls

WBOY
WBOYOriginal
2016-08-08 09:23:09839Durchsuche

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