構成分析全体は主に関数 ngx_init_cycle(&init_cycle) によって処理されます。 = ngx_create_pool(NGX_CYCLE_POOL_SIZE,log );// 16k のメモリ プールを割り当てます。小さなメモリ ノードを追加した場合、最大ノード サイズは 4095 です。コンテキスト構造体は、対応する構造体に保存されます。サイクル>conf_ctxの
コアモジュールは次のとおりです:
/* * 通过加锁和解锁,来更新如下时间 ngx_cached_time = tp; ngx_cached_http_time.data = p0; ngx_cached_err_log_time.data = p1; ngx_cached_http_log_time.data = p2; ngx_cached_http_log_iso8601.data = p3; */コアコード
nginx は、後続のモジュール コンテキストを作成するための道を開くために、最初に NGX_CORE_MODULE を作成しました。つまり、
NGX_CORE_MODULE は、次のように他のモジュールの基礎となります:
その中には、Ngx_errlog_module、ngx_events_module、ngx_http_module モジュールがあります。しないでくださいhave create_confこのメソッドは、ユーザーの conf が実際に動的に作成されることに基づいています。
cycle->pool = pool; cycle->log = log; cycle->new_log.log_level = NGX_LOG_ERR; cycle->conf_prefix; //设置配置文件dir cycle->prefix; //设置运行环境dir cycle->conf_file; //设置配置文件绝对路径 cycle->conf_param; //保存参数 cycle->pathes; //路径数组 cycle->open_files; //分配打开的文件描述符,其中这个结构是一 个链表,每个链表节点都有一个n个size的 cycle->shared_memory; //分配n个共享内存节点,这个是一个list, 每个节点都存在n个ngx_shm_zone_t结构,通过next指向链表后面的节点。 cycle->listening; //listening数组 cycle->conf_ctx = ngx_pcalloc(pool, ngx_max_module*sizeof(void*));
設定ファイルのユーザー設定キーと値を保存するために使用される conf のパラメータを作成します。同時に、temp_pool に
ストレージ プールを作成します。conf->ctx は、cycle->conf_ctx を指します。 、サイクル、プール、ログを保存し、モジュールのタイプとコマンドのタイプを設定します。
メインの構成ファイル変数の解析を開始します。
設定ファイルの解析処理は主にngx_conf_parseによる間接再帰呼び出しであり、主にメインスコープ、イベントスコープ、httpスコープ、サーバースコープ、ロケーションスコープに分かれて解析が行われます。
解析プロセス中に、構成ファイル (nginx.conf) は 3 つのカテゴリに分割されます:
NGX_CORE_MODULE index Ngx_core_module 0 Ngx_errlog_module 1 Ngx_reg_module 6 Ngx_events_module 3 Ngx_http_module 7ngx_conf_parse 関数を入力し、ファイルの解析、ブロックの解析、パラメータの解析のいずれであるかに応じて異なる値を設定します。 、次に ngx_conf_read_token と入力します。この関数は主にファイルを読み取り、いくつかのフラグ変数を設定し、ユーザー設定を conf->args に保存します。設定ファイル (nginx.conf) を解析するときにバッファー メモリが使用され、主に次の値を読み取ります。ファイルを解析してからバッファを解析すると、解析プロセスはストリーミングされます。バッファの後ろにまだ解析されていないデータがあり、セミコロンや中括弧が見つからない場合は、解析されていないデータがバッファの先頭に移動され、その後ファイルに移動されます。解析では、ngx_conf_read_token が呼び出されるたびにコマンドが解析されます。設定ファイルに問題がある場合は、エラーが報告されます。ユーザーの設定を解析した後、設定は conf->args 配列に保存されます。 cf->handler に値があることが判明した場合は、コールバック処理のために cf->handler を呼び出します (通常、mine.types ファイルを処理します)。 cf->handler が空の場合は、ngx_conf_handler を呼び出して cmd を走査します。各モジュールに戻り、コマンドを見つけて、cmd がキーの場合はコマンドの set コールバック メソッドを呼び出します。 値変数の設定では、対応するモジュール変数を設定した後、ngx_conf_read_token を呼び出します。http、event、location などのブロック キーの場合、それらのコールバック関数 (cmd->set) が最初にコンテキスト構造変数を作成し、次に間接的に作成されます。もちろん、再帰的な ngx_conf_parse は異なるコンテキストを設定します。
以上、[nginx ソースコード解析] 構成解析 1 を内容も含めて紹介しましたが、PHP チュートリアルに興味のある友人の参考になれば幸いです。