Heim >Backend-Entwicklung >PHP-Tutorial >[Nginx-Quellcode-Analyse] Hauptfunktionsanalyse
ngx_strerror_init
Die Hauptfunktion besteht darin, zunächst die Fehlerinformationen im Array ngx_sys_errlist zu speichern und ein Zuordnungsarray von errno->errmsg zu erstellen. Wenn im System ein Fehler auftritt, können Sie errmsg direkt über errno finden , wodurch der API-Aufruf reduziert wird.
ngx_get_options(argc, argv)
Diese Funktion setzt hauptsächlich einige Flag-Variablen basierend auf Benutzereingaben und speichert die vom Benutzer eingegebenen Parameter.
Param flag ?/h ngx_show_version=1/ngx_show_help=1 v ngx_show_version=1 V ngx_show_version=1/ngx_show_configure=1 t ngx_test_config=1 q ngx_quiet_mode=1 p ngx_prefix=argv[index]支持-p/home/work/nginx or –p /home/work/nginx c ngx_conf_file=p支持方式同上 g ngx_conf_param=p 支持方式同上 s ngx_signal=p/ngx_process=NGX_PROCESS_SIGNALLER(stop、quit、reopen、reload)
ngx_time_init->ngx_time_update
ngx_regex_ init( )
variable format ngx_cached_time = tp; ngx_cached_http_time.data = p0; “Mon, 28 Sep 1970 06:00:00 GMT” ngx_cached_err_log_time.data = p1; “1970/09/28 12:00:00” ngx_cached_http_log_time.data = p2; “28/Sep/1970:12:00:00 +0600” ngx_cached_http_log_iso8601.data = p3 “1970-09-28T12:00:00+06:00”Setzt hauptsächlich zwei pcre globale Zuordnungs- und Recyclingfunktionen
ngx_pid = getpid();//Erhalte die Hauptprozess-PID
ngx_log_init(ngx_prefix)
#if (NGX_WIN32) if (name[1] != ':') { #else if (name[0] != '/') { #endif if (prefix) { plen = ngx_strlen(prefix);//如果用户输入了-p prefix } else { #ifdef NGX_PREFIX prefix = (u_char *) NGX_PREFIX;//用户没输入,使用configure路径 plen = ngx_strlen(prefix); #else plen = 0; #endif } if (plen) { name = malloc(plen + nlen + 2); if (name == NULL) { return NULL; } p = ngx_cpymem(name, prefix, plen);//copy prefix if (!ngx_path_separator(*(p - 1))) { *p++ = '/'; } ngx_cpystrn(p, (u_char *) NGX_ERROR_LOG_PATH, nlen + 1);//copy path p = name; } }
init_cycle.pool = ngx_create_pool(1024, log);// Ordnen Sie einen Speicherpoolknoten zu, einen bestimmten Speicherpool. Weitere Informationen finden Sie im Speicherpool-Analysedokument
ngx_log { ngx_log.file = &ngx_log_file; { ngx_fd_t fd;//打开的错误日志 ngx_str_t name;//未设置 u_char *buffer;//未设置 u_char *pos;//未设置 u_char *last;//未设置 } log_level = NGX_LOG_NOTICE; }Einzelheitenngx_save_argvDie Funktion speichert die vom Benutzer eingegebenen Parameter im Array ngx_argvngx_process_options
Diese Funktion verarbeitet hauptsächlich Benutzereingabeparameter, Konfigurationsdateien und Tests Konfigurationsdateien, conf_file =/home/work/hunter/nginx/nginx_gdb/conf/nginx.conf conf_prefix =/home/work/hunter/nginx/nginx_gdb/conf
Präfix =/home/work/hunter/nginx/nginx_gdbngx_crc32_table_init()//CRC-Tabelle initialisieren//Modulindex jedes Moduls festlegen
und analysieren Sie dann die Konfigurationsanalyse
ngx_max_module = 0; for (i = 0; ngx_modules[i]; i++) { ngx_modules[i]->index = ngx_max_module++; }ngx_init_cycl()
Das Obige stellt die Hauptfunktionsanalyse von [Nginx-Quellcode-Analyse] vor, einschließlich Aspekten des Inhalts. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.