Apache2の自作モジュールからで httpd.conf から値をとる
Apacheの設定は httpd.conf で行いますが独自のモジュールを作成した場合に、独自のディレクティブを定義し設定を読み込みたい場合があります。
モジュール固有のパラメータなどがサーバー毎に異なる場合などに利用できるでしょう。
Apache1.3系での方法は、Apacheモジュール プログラミングガイド (Advanced Server‐side programmingシリーズ)を読めばばっちり分かるのですが Apache2系に関しては情報が少ないのでまとめておきます。
なお今回はディレクトリ毎の設定ではなく、サーバー毎の設定である per-server-config を例にしていますので per-dir-config の場合は適宜読み替えてください。
やることは以下5つ
- 設定情報を保持する構造体を定義する
- configを作成する関数を用意する
- 各ディレクティブを取得して構造体にセットするための関数を用意する
- command_rec構造体に各ディレクティブの定義とセットするための関数等々をセットする
- module構造体にcommand_rec構造体、config作成関数をセットする
設定情報を保持する構造体を定義する
typedef struct { char* hoge; char* huga; } modulename_server_config;
こんな感じで設定情報を保持する構造体を定義します。もちろん char* だけでなく int なども使えます。
configを作成する関数を用意する
static void* create_modulename_server_config(apr_pool_t* p, server_rec* s) { modulename_server_config* conf = apr_palloc(p, sizeof(modulename_sever__config)); conf->hoge = apr_pstrdup(p, "hogehoge"); // デフォルト値を入れておくとか return conf; }
各ディレクトリを取得して構造体にセットするための関数を用意する
static const char* modulename_set_hoge(cmd_parms* cmd, void* dummy, const char* arg) { modulename_server_config* conf = ap_get_module_config(cmd->server->module_config, &modulename_module); conf->hoge = apr_pstrdup(cmd->pool, arg); return NULL; }
ここで実際に hoge ディレクティブの値を構造体にセットします。
エラーチェックや数値への変換などはここで行います。
command_rec構造体に各ディレクティブの定義とセットするための関数等々をセットする
static const command_rec modulename_cmds[] = { AP_INIT_TAKE1("hoge", modulename_set_hoge, NULL, OR_ALL, "help message for hoge"), {NULL} };
ディレクティブ名・値をセットするための関数・httpd.confのどこのスコープ内で有効なものか?などをセットします。
AP_INIT_TAKE1 はディレクティブが引数をひとつとるということを意味します。
AP_INIT_TAKE1の第一引数の hoge がディレクティブ名になります。
つまり
httpd.confで
hoge somevalue
と書くことになります。
module構造体にcommand_rec構造体、config作成関数をセットする
module AP_MODULE_DECLARE_DATA modulename_module = { STANDARD20_MODULE_STUFF, NULL, /* create per-dir config structures */ NULL, /* merge per-dir config structures */ create_modulename_server_config, /* create per-server config structures */ NULL, /* merge per-server config structures */ modulename_cmd, /* table of config file commands */ modulename_register_hooks /* register hooks */ };
ここが起点です。module構造体にcommand_rec構造体、config作成関数をセットします。
というわけで大分端折りましたがこんな感じで取れると思います。
細かいパラメータ等は
Apacheモジュール プログラミングガイド (Advanced Server‐side programmingシリーズ)
- 作者: 小山浩之
- 出版社/メーカー: 技術評論社
- 発売日: 2003/08/01
- メディア: 単行本
- 購入: 1人 クリック: 81回
- この商品を含むブログ (26件) を見る