ホームページ  >  記事  >  バックエンド開発  >  【nginxソースコード解析】構成解析1

【nginxソースコード解析】構成解析1

WBOY
WBOYオリジナル
2016-08-08 09:24:441382ブラウズ

構成分析全体は主に関数 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							7

ngx_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 チュートリアルに興味のある友人の参考になれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。