apache module でWEBサーバフィルタを作る
IISやapacheに下図のようにモジュールを追加することで、WEBサーバの動作をコントロールすることができる。
例として、8:00から18:00以外の時間にアクセスされた場合、「時間外」を表示するフィルタ sample01 を作成する。
1.環境
OS: CentOS7.7
apache: 2.4.6
2. apxsのインストール
yum install httpd-devel
3. フィルタのテンプレートを生成
cd /tmp/work/ apxs -g -n sample01
4. ソースコードを以下のように修正
以下は、8:00-18:00以外の時間は、”overtime”というHTMLを表示する。
/* The sample content handler */ static int sample01_handler(request_rec *r) { time_t timer; struct tm *t_st; char buff[256]; time(&timer); t_st = localtime(&timer); sprintf(buff,"%02d%02d", t_st->tm_hour, t_st->tm_min); if(strcmp(buff,"0800")>=0 && (strcmp(buff,"1800")<=0)){ return DECLINED; } else { r->content_type = "text/html"; if(!r->header_only){ ap_rputs("<html><body>overtime</body></html>", r); } return OK; } } static void sample01_register_hooks(apr_pool_t *p) { ap_hook_handler(sample01_handler, NULL, NULL, APR_HOOK_FIRST); }
5. Make
apxs -c mod_sample01.c
6. 生成されたモジュールを、apacheのモジュールフォルダにコピー
cp .libs/mod_sample01.so /etc/httpd/modules/
7. apacheの設定ファイルを修正し、生成したモジュールを一番最初に読み込むようにする
# # Dynamic Shared Object (DSO) Support # # To be able to use the functionality of a module which was built as a DSO you # have to place corresponding `LoadModule' lines at this location so the # directives contained in it are actually available _before_ they are used. # Statically compiled modules (those listed by `httpd -l') do not need # to be loaded here. # # Example: # LoadModule foo_module modules/mod_foo.so # LoadModule sample01_module modules/mod_sample01.so Include conf.modules.d/*.conf
8. apache再起動