してみるテストロゴ
Apache 2.4系でHTTP/2サーバを構築してみるテスト。

Apache Moduleのフック関数リスト

モジュールを使うと、いろいろ面白いことができるのですが、いかんせん資料が少ないのが難しいところ。

ということで、少しずつですが、モジュール作りに役立つ情報を載せていこうと思います。

モジュールで使えるフック関数の一覧

Apache HTTPD Webサーバの利点は、自分でモジュールを作りやすいこと。

ということで、モジュールで何ができるのかを知るために、利用できるフック関数の一覧を出してみます。

このフック関数から得られる情報を元に、Webサーバに所望の動作をさせることができます。

ソースを展開した後に、展開したディレクトリに入った後に、以下のコマンドを打つと、フック可能な関数の一覧が出てきます。

# perl support/list_hooks.pl

とコマンドを打つと、モジュールで利用できるフック関数の一覧が出てきます。

フック関数は、返値を返さないVOIDタイプと、返値を返すRUN_FIRSTタイプとRUN_ALLタイプの3種類あります。

VOIDタイプのフック関数は、ロードされたモジュールの同名のフック関数が、全て呼ばれます。

一方、RUN_FIRSTタイプとRUN_ALLタイプのフック関数は、とロードされたモジュールのすべての同名のフック関数が呼ばれるとは限りません。

RUN_FIRSTタイプは、フック関数が「DECLINE(辞退)」を返すと、次のモジュールの同名のフック関数を呼びます。つまり、エラーが帰るか、「OK(成功)」が返るとそれ以上、他のモジュールの同名のフック関数を呼び出しません。

一つのモジュールで成功すれば、他のモジュールでの処理が必要無いフック関数で使用されます。

RUN_ALLタイプは、フック関数が「DECLINE(辞退)もしくは、「OK(成功)」を返すと、次のモジュールの同名のフック関数を呼びます。つまり、エラーが帰ると、他のモジュールの同名のフック関数を呼び出しません。

全てのモジュールが、エラー無く実行する必要のあるいフック関数で使用されます。

httpd-2.4.33の場合、表にしてみると、以下のようになります。

NameDecraedImplementedTypeFunction
access_checkerinclude/http_request.hserver/request.cRUN_ALLint access_checker(request_rec *r)
access_checker_exinclude/http_request.hserver/request.cRUN_FIRSTint access_checker_ex(request_rec *r)
auth_checkerinclude/http_request.hserver/request.cRUN_FIRSTint auth_checker(request_rec *r)
check_configinclude/http_config.hserver/config.cRUN_ALLint check_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
check_user_idinclude/http_request.hserver/request.cRUN_FIRSTint check_user_id(request_rec *r)
child_initinclude/http_config.hserver/config.cVOIDvoid child_init(apr_pool_t *pchild, server_rec *s)
child_statusinclude/ap_mpm.hserver/mpm_common.cVOIDvoid child_status(server_rec *s, pid_t pid, ap_generation_t gen, int slot, mpm_child_status state)
create_connectioninclude/http_connection.hserver/connection.cRUN_FIRSTconn_rec * create_connection(apr_pool_t *p, server_rec *server, apr_socket_t *csd, long conn_id, void *sbh, apr_bucket_alloc_t *alloc)
create_requestinclude/http_request.hserver/request.cRUN_ALLint create_request(request_rec *r)
default_portinclude/http_protocol.hserver/protocol.cRUN_FIRSTapr_port_t default_port(const request_rec *r)
dirwalk_statinclude/http_request.hserver/request.cRUN_FIRSTapr_status_t dirwalk_stat(apr_finfo_t *finfo, request_rec *r, apr_int32_t wanted)
drop_privilegesinclude/mpm_common.hserver/mpm_common.cRUN_ALLint drop_privileges(apr_pool_t * pchild, server_rec * s)
end_generationinclude/ap_mpm.hserver/mpm_common.cVOIDvoid end_generation(server_rec *s, ap_generation_t gen)
error_loginclude/http_core.hserver/log.cVOIDvoid error_log(const ap_errorlog_info *info, const char *errstr)
expr_lookupinclude/ap_expr.hserver/util_expr_eval.cRUN_FIRSTint expr_lookup(ap_expr_lookup_parms *parms)
fatal_exceptioninclude/ap_mpm.hserver/mpm_common.cRUN_ALLint fatal_exception(ap_exception_info_t *ei)
fixupsinclude/http_request.hserver/request.cRUN_ALLint fixups(request_rec *r)
force_authninclude/http_request.hserver/request.cRUN_FIRSTint force_authn(request_rec *r)
generate_log_idinclude/http_log.hserver/log.cRUN_FIRSTint generate_log_id(const conn_rec *c, const request_rec *r, const char **id)
get_mgmt_itemsinclude/http_core.hserver/core.cRUN_ALLint get_mgmt_items(apr_pool_t *p, const char * val, apr_hash_t *ht)
get_suexec_identityos/unix/unixd.hos/unix/unixd.cRUN_FIRSTap_unix_identity_t * get_suexec_identity(const request_rec *r)
handlerinclude/http_config.hserver/config.cRUN_FIRSTint handler(request_rec *r)
header_parserinclude/http_config.hserver/config.cRUN_ALLint header_parser(request_rec *r)
http_schemeinclude/http_protocol.hserver/protocol.cRUN_FIRSTconst char * http_scheme(const request_rec *r)
insert_error_filterinclude/http_protocol.hmodules/http/http_protocol.cVOIDvoid insert_error_filter(request_rec *r)
insert_filterinclude/http_request.hserver/request.cVOIDvoid insert_filter(request_rec *r)
insert_network_bucketinclude/http_core.hserver/core.cRUN_FIRSTapr_status_t insert_network_bucket(conn_rec *c, apr_bucket_brigade *bb, apr_socket_t *socket)
log_transactioninclude/http_protocol.hserver/protocol.cRUN_ALLint log_transaction(request_rec *r)
map_to_storageinclude/http_request.hserver/request.cRUN_FIRSTint map_to_storage(request_rec *r)
monitorinclude/mpm_common.hserver/mpm_common.cRUN_ALLint monitor(apr_pool_t *p, server_rec *s)
mpminclude/ap_mpm.hserver/mpm_common.cRUN_FIRSTint mpm(apr_pool_t *pconf, apr_pool_t *plog, server_rec *server_conf)
mpm_get_nameinclude/mpm_common.hserver/mpm_common.cRUN_FIRSTconst char * mpm_get_name(void)
mpm_queryinclude/mpm_common.hserver/mpm_common.cRUN_FIRSTint mpm_query(int query_code, int *result, apr_status_t *rv)
mpm_register_timed_callbackinclude/mpm_common.hserver/mpm_common.cRUN_FIRSTapr_status_t mpm_register_timed_callback(apr_time_t t, ap_mpm_callback_fn_t *cbfn, void *baton)
note_auth_failureinclude/http_protocol.hserver/protocol.cRUN_FIRSTint note_auth_failure(request_rec *r, const char *auth_type)
open_htaccessinclude/http_config.hserver/config.cRUN_FIRSTapr_status_t open_htaccess(request_rec *r, const char *dir_name, const char *access_name, ap_configfile_t **conffile, const char **full_name)
open_logsinclude/http_config.hserver/config.cRUN_ALLint open_logs(apr_pool_t *pconf,apr_pool_t *plog, apr_pool_t *ptemp,server_rec *s)
optional_fn_retrieveinclude/http_config.hserver/config.cVOIDvoid optional_fn_retrieve(void)
optional_hook_testmodules/test/mod_optional_hook_export.hmodules/test/mod_optional_hook_export.cOPTIONAL RUN_ALLint optional_hook_test(const char *)
post_configinclude/http_config.hserver/config.cRUN_ALLint post_config(apr_pool_t *pconf,apr_pool_t *plog, apr_pool_t *ptemp,server_rec *s)
post_perdir_configinclude/http_request.hserver/request.cRUN_ALLint post_perdir_config(request_rec *r)
post_read_requestinclude/http_protocol.hserver/protocol.cRUN_ALLint post_read_request(request_rec *r)
pre_close_connectioninclude/http_connection.hserver/connection.cRUN_ALLint pre_close_connection(conn_rec *c)
pre_configinclude/http_config.hserver/config.cRUN_ALLint pre_config(apr_pool_t *pconf,apr_pool_t *plog, apr_pool_t *ptemp)
pre_connectioninclude/http_connection.hserver/connection.cRUN_ALLint pre_connection(conn_rec *c, void *csd)
pre_mpminclude/scoreboard.hserver/scoreboard.cRUN_ALLint pre_mpm(apr_pool_t *p, ap_scoreboard_e sb_type)
pre_read_requestinclude/http_protocol.hserver/protocol.cVOIDvoid pre_read_request(request_rec *r, conn_rec *c)
process_connectioninclude/http_connection.hserver/connection.cRUN_FIRSTint process_connection(conn_rec *c)
protocol_getinclude/http_protocol.hserver/protocol.cRUN_FIRSTconst char * protocol_get(const conn_rec *c)
protocol_proposeinclude/http_protocol.hserver/protocol.cRUN_ALLint protocol_propose(conn_rec *c, request_rec *r, server_rec *s, const apr_array_header_t *offers, apr_array_header_t *proposals)
protocol_switchinclude/http_protocol.hserver/protocol.cRUN_FIRSTint protocol_switch(conn_rec *c, request_rec *r, server_rec *s, const char *protocol)
quick_handlerinclude/http_config.hserver/config.cRUN_FIRSTint quick_handler(request_rec *r, int lookup_uri)
resume_connectioninclude/mpm_common.hserver/mpm_common.cVOIDvoid resume_connection(conn_rec *c, request_rec *r)
suspend_connectioninclude/mpm_common.hserver/mpm_common.cVOIDvoid suspend_connection(conn_rec *c, request_rec *r)
test_configinclude/http_config.hserver/config.cVOIDvoid test_config(apr_pool_t *pconf, server_rec *s)
translate_nameinclude/http_request.hserver/request.cRUN_FIRSTint translate_name(request_rec *r)
type_checkerinclude/http_request.hserver/request.cRUN_FIRSTint type_checker(request_rec *r)

となります。

NEXT >> HTTP/2の動作確認

©Copyrights 2015-2018, non-standard programmer

このサイトは、あくまでも私の個人的体験を、綴ったものです。 軽く参考程度にご利用ください。