Apache/設定ファイル読み込みを読む
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
#contents
*はじめに [#ze2fb01e]
先日Apacheの設定をしていてふと気になったのですがApacheで...
なお、今回対象としたバージョンは2.2.6です。
*処理の流れ [#he2ef5cf]
main関数はserver/main.cにあります。眺めた感じ、設定ファイ...
-ap_setup_prelinked_modules
-ap_read_config
-ap_process_config_tree
*ap_setup_prelinked_modules [#z14b169d]
ap_setup_prelinked_modules関数はconfig.cに書かれています...
module *ap_preloaded_modules[] = {
&core_module,
&mpm_prefork_module,
&http_module,
&so_module,
NULL
};
**configure.in [#jbe339ee]
modules.cはbuild/build-modules-c.awkにモジュール一覧を流...
500行目ぐらいに以下のコードがありました。
esyscmd(./build/config-stubs .)
build/config-stubsがカレント以下のconfig*.m4を取得して、*...
**ap_add_module [#p8c8ccba]
それでは個々のモジュールをセットアップしているap_add_modu...
ap_add_module_commands関数を見ると、どうやらこの関数でモ...
参考としてcoreモジュールを眺めてみましょう。その前にinclu...
typedef struct module_struct module;
struct module_struct {
int version;
int minor_version;
int module_index;
const char *name;
void *dynamic_load_handle;
struct module_struct *next;
unsigned long magic;
void (*rewrite_args) (process_rec *process);
void *(*create_dir_config) (apr_pool_t *p, char *dir);
void *(*merge_dir_config) (apr_pool_t *p, void *base...
void *(*create_server_config) (apr_pool_t *p, server...
void *(*merge_server_config) (apr_pool_t *p, void *b...
void *new_conf);
const command_rec *cmds;
void (*register_hooks) (apr_pool_t *p);
};
typedef struct command_struct command_rec;
struct command_struct {
const char *name;
cmd_func func;
void *cmd_data;
int req_override;
enum cmd_how args_how;
const char *errmsg;
};
というわけでcommand_rec配列は後ろから2番目です。次にserve...
AP_DECLARE_DATA module core_module = {
STANDARD20_MODULE_STUFF,
create_core_dir_config, /* create per-director...
merge_core_dir_configs, /* merge per-directory...
create_core_server_config, /* create per-server c...
merge_core_server_configs, /* merge per-server co...
core_cmds, /* command apr_table_t...
register_hooks /* register hooks */
};
さらにcore_cmdsの定義(の抜粋)です。読むとおもしろそうな...
-<Directory>みたいなのもDocumentRootと同様に扱われている
-同じようなことをしてそうなのに<Directory>はRAW(コマンド...
static const command_rec core_cmds[] = {
AP_INIT_RAW_ARGS("<Directory", dirsection, NULL, RSRC_CO...
"Container for directives affecting resources located ...
"directories"),
AP_INIT_TAKE1("<IfModule", start_ifmod, NULL, EXEC_ON_RE...
"Container for directives based on existance of specif...
AP_INIT_TAKE1("DocumentRoot", set_document_root, NULL, R...
"Root directory of the document tree"),
AP_INIT_RAW_ARGS("Options", set_options, NULL, OR_OPTIONS,
"Set a number of attributes for a given directory"),
ap_add_module関数に戻るとap_register_hooks関数を呼んでモ...
*ap_read_config [#led823d9]
ap_read_config関数ではまずinit_server_config関数を呼んで...
続いて、process_command_config関数がap_server_pre_read_co...
次にap_process_resource_config関数が呼ばれています。[[apr...
process_resource_config_nofnmatch関数でも設定ファイル指定...
**ap_build_config [#a3eae4f3]
それでは読み込み処理のメインらしいap_build_config関数に進...
ap_build_config_sub関数ではまずap_getword_conf関数を呼び...
次にap_find_command_in_modules関数を呼び出してディレクテ...
<IfModule>の処理を行っているcore.cのstart_ifmod関数を...
話を1回目のap_build_config_sub関数呼び出しにもどしましょ...
*ap_process_config_tree [#e44803ae]
ap_process_config_tree関数の前にap_run_pre_config関数が呼...
AP_IMPLEMENT_HOOK_RUN_ALL(int, pre_config,
(apr_pool_t *pconf, apr_pool_t...
apr_pool_t *ptemp),
(pconf, plog, ptemp), OK, DECL...
のようです。AP_IMPLEMENT_HOOK_RUN_ALLマクロはinclude/ap_c...
ap_process_config_tree関数は初期化を行った上で、処理をap_...
ap_walk_config_sub関数ではap_set_config_vectors関数を呼び...
*server/main.cの残り [#o477b984]
設定ファイルの解析が終わったので後はリクエストを受け付け...
*おわりに [#n7263655]
今回はApacheの設定ファイル読み込み処理を読んでみました。...
-抽象レイヤーを挟むことでコードの再利用性が高まる
-モジュール性を高くすると構造の把握がしづらくなる
といったところです。それではみなさんもよいコードリーディ...
終了行:
#contents
*はじめに [#ze2fb01e]
先日Apacheの設定をしていてふと気になったのですがApacheで...
なお、今回対象としたバージョンは2.2.6です。
*処理の流れ [#he2ef5cf]
main関数はserver/main.cにあります。眺めた感じ、設定ファイ...
-ap_setup_prelinked_modules
-ap_read_config
-ap_process_config_tree
*ap_setup_prelinked_modules [#z14b169d]
ap_setup_prelinked_modules関数はconfig.cに書かれています...
module *ap_preloaded_modules[] = {
&core_module,
&mpm_prefork_module,
&http_module,
&so_module,
NULL
};
**configure.in [#jbe339ee]
modules.cはbuild/build-modules-c.awkにモジュール一覧を流...
500行目ぐらいに以下のコードがありました。
esyscmd(./build/config-stubs .)
build/config-stubsがカレント以下のconfig*.m4を取得して、*...
**ap_add_module [#p8c8ccba]
それでは個々のモジュールをセットアップしているap_add_modu...
ap_add_module_commands関数を見ると、どうやらこの関数でモ...
参考としてcoreモジュールを眺めてみましょう。その前にinclu...
typedef struct module_struct module;
struct module_struct {
int version;
int minor_version;
int module_index;
const char *name;
void *dynamic_load_handle;
struct module_struct *next;
unsigned long magic;
void (*rewrite_args) (process_rec *process);
void *(*create_dir_config) (apr_pool_t *p, char *dir);
void *(*merge_dir_config) (apr_pool_t *p, void *base...
void *(*create_server_config) (apr_pool_t *p, server...
void *(*merge_server_config) (apr_pool_t *p, void *b...
void *new_conf);
const command_rec *cmds;
void (*register_hooks) (apr_pool_t *p);
};
typedef struct command_struct command_rec;
struct command_struct {
const char *name;
cmd_func func;
void *cmd_data;
int req_override;
enum cmd_how args_how;
const char *errmsg;
};
というわけでcommand_rec配列は後ろから2番目です。次にserve...
AP_DECLARE_DATA module core_module = {
STANDARD20_MODULE_STUFF,
create_core_dir_config, /* create per-director...
merge_core_dir_configs, /* merge per-directory...
create_core_server_config, /* create per-server c...
merge_core_server_configs, /* merge per-server co...
core_cmds, /* command apr_table_t...
register_hooks /* register hooks */
};
さらにcore_cmdsの定義(の抜粋)です。読むとおもしろそうな...
-<Directory>みたいなのもDocumentRootと同様に扱われている
-同じようなことをしてそうなのに<Directory>はRAW(コマンド...
static const command_rec core_cmds[] = {
AP_INIT_RAW_ARGS("<Directory", dirsection, NULL, RSRC_CO...
"Container for directives affecting resources located ...
"directories"),
AP_INIT_TAKE1("<IfModule", start_ifmod, NULL, EXEC_ON_RE...
"Container for directives based on existance of specif...
AP_INIT_TAKE1("DocumentRoot", set_document_root, NULL, R...
"Root directory of the document tree"),
AP_INIT_RAW_ARGS("Options", set_options, NULL, OR_OPTIONS,
"Set a number of attributes for a given directory"),
ap_add_module関数に戻るとap_register_hooks関数を呼んでモ...
*ap_read_config [#led823d9]
ap_read_config関数ではまずinit_server_config関数を呼んで...
続いて、process_command_config関数がap_server_pre_read_co...
次にap_process_resource_config関数が呼ばれています。[[apr...
process_resource_config_nofnmatch関数でも設定ファイル指定...
**ap_build_config [#a3eae4f3]
それでは読み込み処理のメインらしいap_build_config関数に進...
ap_build_config_sub関数ではまずap_getword_conf関数を呼び...
次にap_find_command_in_modules関数を呼び出してディレクテ...
<IfModule>の処理を行っているcore.cのstart_ifmod関数を...
話を1回目のap_build_config_sub関数呼び出しにもどしましょ...
*ap_process_config_tree [#e44803ae]
ap_process_config_tree関数の前にap_run_pre_config関数が呼...
AP_IMPLEMENT_HOOK_RUN_ALL(int, pre_config,
(apr_pool_t *pconf, apr_pool_t...
apr_pool_t *ptemp),
(pconf, plog, ptemp), OK, DECL...
のようです。AP_IMPLEMENT_HOOK_RUN_ALLマクロはinclude/ap_c...
ap_process_config_tree関数は初期化を行った上で、処理をap_...
ap_walk_config_sub関数ではap_set_config_vectors関数を呼び...
*server/main.cの残り [#o477b984]
設定ファイルの解析が終わったので後はリクエストを受け付け...
*おわりに [#n7263655]
今回はApacheの設定ファイル読み込み処理を読んでみました。...
-抽象レイヤーを挟むことでコードの再利用性が高まる
-モジュール性を高くすると構造の把握がしづらくなる
といったところです。それではみなさんもよいコードリーディ...
ページ名: