apache module ��ȯ���Ϥ�
�����ϡ�ɬ�פ������� Apache 1.3 �� mod_access ���¤�����Ȥ�������ñ¤¤Þ¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Î»ï¿½ï¿½ï¿½Ã±ï¿½Ë¤ï¿½ï¿½ï¿½ï¿½Î¤ï¿½ï¿½Â¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ç¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Õ¤È»×¤ï¿½Î©ï¿½Ã¤Æ¡ï¿½ï¿½ì¤«ï¿½ï¿½ Apache 2.0 �ѤΥ⥸�塼���ñ¤¤¤Æ¤ß¤Þ¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ñ¤¯¾ï¿½Ç¿ï¿½ï¿½ï¿½ Web �����Ȥ�õ���Ƥߤ��ΤǤ��������ޤ����ܸ�����������ʸ�Ϥ���������ʤ��ä��Τǡ���ȯ������ʬ���ä�����(�ȸ����ۤ��礷����Τ���ʤ��Ǥ���)��ޤȤ�Ƥ������Ȼפ��ޤ���
Apache �ϡ��ꥯ�����Ȥ���������Ǻ٤����ե����������ꤷ�ơ����γƥե��������͡��ʽ�����Ԥ��ޤ���Apache �Υ⥸�塼��γ�ȯ�ϡ����Υ⥸�塼�뤬��Ū�ν����򤹤���Ŭ�ڤʥե������� Apache �ν�������ä��Ȥ��ˡ�Apache ����ƤӽФ��Ƥ�餦����δؿ�(hook �ؿ�)���뤳�Ȥȡ����Υ⥸�塼�뤬ư��뤿��������Ԥ��ؿ����뤳�ȡ��ˤʤ�ޤ���
�ե������ˤϡ��㤨�Ф��Υꥯ�����Ȥ�����դ��뤫���ݤ��뤫�����ե������䡤�ꥯ�����Ȥ��줿 URI �ȼºݤΥǥ�������Υե�����Ȥδ֤��б��դ����褹��ե������������Ƥ������ºݤΥ쥹�ݥ󥹤���������ե�������������ޤ���hook �ؿ�����������ݥ���ȤϤ����Υե������ˤʤ�ޤ�����������󤽤����ƤΥե������Τ���δؿ����Ѱդ���ɬ�פϤ���ޤ��󡥤ޤ����̤������ܤ�ɬ�פ��ʤ���С������Ѥδؿ����������ɬ�פ���ޤ��󡥤ʤΤǡ���äȤ⾮���Ϥʥ⥸�塼��Ǥϡ�hook �ؿ����Ĥȡ�hook �ؿ��� Apache����Ͽ���뤿��δؿ���ɬ�פǤ�����⤦��ġ��Թ���Ĥδؿ����������кѤߤޤ���Apache ��ɸ��⥸�塼��Ǥ��� mod_asis �⥸�塼��⡤���Τ褦�ʴؿ�����Ĥ���������줿�⥸�塼��Ǥ���
���ơ��⥸�塼�볫ȯ�λϤ����Ǥ�����Apache �򥤥󥹥ȡ��뤷�����˰��˥��󥹥ȡ��뤵��Ƥ��롤apxs ���ޥ�ɤ�Ȥ��ޤ����ʲ����ä����� Linux ��Ǽ¹Ԥ��������äǤ������Υ��ޥ�ɤ� Apache �Υ⥸�塼�볫ȯ������ڤ륳�ޥ�ɤǡ��������⥸�塼�������Υ������ե�����Υƥ�ץ졼�Ȥ���Ϥ��Ƥ��줿�ꡤ�⥸�塼��򥳥�ѥ��뤷�Ƥ��줿�ꤹ�롤�ȤƤ������ʤ�ΤǤ���
�ƥ�ץ졼�Ȥ���Ϥ���ˤ�
apxs -g -n test
�Ȥ��ޤ���-g ���ƥ�ץ졼�Ƚ��ϥ��ޥ�ɤ� -n ���ץ����Ǥ��Υ⥸�塼���̾������ꤷ�ޤ�������ȡ������ȥǥ��쥯�ȥ�� test �Ȥ���̾���Υǥ��쥯�ȥ꤬��������ơ�
Makefile mod_test.c modules.mk
��3�ĤΥե����뤬��������ޤ���modules.mk �� Makefile �Υ��ݡ����ѤΥե�����Ǥ���mod_test.c ���⥸�塼��Υ������ե�����ˤʤ�ޤ�������Ū�ˤϡ����Υե�������Խ����ơ�ɬ�פ� hook �������Ѥδؿ���������Ƥ������Ȥˤʤ�ޤ���
mod_test.c ����Ȥϡ����Τ褦�ˤʤäƤ��ޤ�(Ƭ�Υ����ȤϾʤ��Ƥ��ޤ�)��
1 #include "httpd.h"
2 #include "http_config.h"
3 #include "http_protocol.h"
4 #include "ap_config.h"
5
6 /* The sample content handler */
7 static int test_handler(request_rec *r)
8 {
9 if (strcmp(r->handler, "test")) {
10 return DECLINED;
11 }
12
13 r->content_type = "text/html";
14 if (!r->header_only)
15 ap_rputs("The sample page from mod_test.c\n", r);
16
17 return OK;
18 }
19
20 static void test_register_hooks(apr_pool_t *p)
21 {
22 ap_hook_handler(test_handler, NULL, NULL, APR_HOOK_MIDDLE);
23 }
24
25 /* Dispatch list for API hooks */
26 module AP_MODULE_DECLARE_DATA test_module = {
27 STANDARD20_MODULE_STUFF,
28 NULL, /* create per-dir config structures */
29 NULL, /* merge per-dir config structures */
30 NULL, /* create per-server config structures */
31 NULL, /* merge per-server config structures */
32 NULL, /* table of config file commands */
33 test_register_hooks /* register hooks */
34 };
���Υ����ɤ����Ǥ�ڤ����⤹��ȡ�test_handler() �ؿ��ϥꥯ�����Ȥ��Ф���쥹�ݥ󥹥ǡ�������������ϥ�ɥ顼�ؿ��Ǥ������Υϥ�ɥ顼�θƤӽФ��ϸ�Ҥ��ޤ���test_register_hooks() �Ϥ��Υ⥸�塼���������� hook�� Apache ����Ͽ���뤿��δؿ��Ǥ���Apache �ν�������˸ƤӽФ���ޤ���������ǸƤӽФ��Ƥ��� ap_hook_handler() �ؿ��ϡ�̾�����̤� handler ����Ͽ���뤿��Τ�ΤǤ�����Ͽ���� hook �μ�����ˤ��Τ褦�ʴؿ����Ѱդ���Ƥ��ޤ���test_module ����ϡ����Ҥ� hook ��Ͽ�ؿ���(�����Ǥ��������Ƥޤ���)�ǥ��쥯�ƥ��֤��������ؿ����� Apache ���Ϥ�����Τ�ΤǤ����ܤ������̤ιƤǽ񤳤��Ȼפ��ޤ���
����򥳥�ѥ��뤹��ˤϡ�mod_test.c �Ȱ����������줿 Makefile ��Ȥä� make ���뤫��apxs ���ޥ�ɤ�Ȥ��ޤ���
make ������ϡ�ñ�� make ����Х���ѥ���Ǥ��ޤ��� install �������åȤ���ꤹ��С�����ѥ��뤬����������³���ơ��Ǥ������ä� DSO �ե������ modules �ǥ��쥯�ȥ�˥��ԡ����Ƥ���ޤ���
apxs ���ޥ�ɤ�Ȥ����ϡ�
apxs -c mod_test.c
�ǥ���ѥ���Ǥ��ޤ�������ѥ����Ʊ���� modules �ǥ��쥯�ȥ�˥��ԡ�����ˤ�
apxs -c -i mod_test.c
�Ȥ��ޤ������� -a ���ץ�������ꤷ�Ƥ����С�httpd.conf �ե�����ˤ��Υ⥸�塼����ɤ߹�������(LoadModule �ǥ��쥯�ƥ���)���ɲä��Ƥ���ޤ���
apxs -c -i -a mod_test.c
�ºݤˤ��Υ⥸�塼���Ȥ��ˤϡ��㤨�м��Τ褦������� httpd.conf ��Ŭ���ʤȤ������ɲä��ޤ���
<Location "/hoge/">
SetHandler test
</Location>
������ɲä��� Apache ��(��)��ư�����顤http://localhost/hoge/ ��ꥯ�����Ȥ��Ƥߤޤ�(�ۥ���̾��ݡ����ֹ�ϡ��ºݤ�����˹�碌�Ƥ�������)������ȼ��Τ褦�ʥ쥹�ݥ󥹤��֤äƤ��ޤ���
The sample page from mod_test.c
����ϡ��åµï¿½Î¥ï¿½ï¿½ï¿½ï¿½É¤ï¿½ 15�����ǽñ¤½Ð¤ï¿½ï¿½ï¿½ï¿½ï¿½Î¤Ç¤ï¿½ï¿½ï¿½
���ơ����Υꥯ�����Ȥ���������ѥ��뤷���⥸�塼����ӤĤ��Ƥ���Τ���httpd.conf ���ɲä���
<Location "/hoge/">
SetHandler test
</Location>
������Ǥ����Ĥޤꡤ/hoge/ �ǻϤޤ� URI ���ꥯ�����Ȥ����С����Υꥯ�����Ȥ��������ϥ�ɥ�Ȥ��� test ��Ȥ����Ȥ���ꤷ�ޤ���
���饤����Ȥ���ꥯ�����Ȥ������ test_handler() ���ꥯ�����Ȥ��٤˸ƤӽФ���ޤ���test_handler() �ϸƤӽФ����ȼ�ʬ�����Υꥯ�����Ȥ��������٤���Ĵ�٤ޤ�(�����ɤ� 9����)����ʬ����������٤��ʤ�С�r->handler ���ͤ� test �ˤʤäƤ��ޤ�(�����ͤ����ꤹ��Τ� SetHandler �ǥ��쥯�ƥ��֤λŻ��Ǥ�)����ʬ����������٤��ꥯ�����Ȥʤ顤�쥹�ݥ󥹥ǡ���������(15����)���ޤ���
ǡ���Ǥ��礦�����ճ��ȴ�ñ����ʤ��Ǥ���? ����Ϥ��������Ǥ��������Ƥ�����¾�Υե������Ǥν������ä�ºݤ˥⥸�塼���񤯾�������ʥ饤�֥����äʤɤ�񤤤Ƥߤ����Ȼפ��ޤ���
����ʸ��:
- Apache �ν�����ή��˴ؤ��Ƥ������Υڡ����˽񤤤Ƥ���ޤ���
- hook ��Ͽ�ؿ��ΰ�����������Υڡ����κǸ�����ˤ���ޤ���������������ʸ�ŤĤ����ʤ��ΤǤ���ä�ʪÂ��ʤ��Ǥ���
�ȥ�å��Хå�URL
���ε����ؤΥȥ�å��Хå�
���ε����ؤΥ�����
apxs�ǥ⥸�塼��Υƥ�ץ졼�Ȥ����ʤ���Τ�ޤ���Ǥ�����
��ʬ�ǽ񤤤Ƥ⤵�ۤɼ�֤�������ƥ�ץ졼�ȤǤϤʤ��Ǥ��������줬����������ߵ�Ϥ��ä��㤯�������ޤ��͡�
mod_test.c�Υ����ɤǡ�>�פ���>gt;�פ�ɽ������Ƥ���褦�ʤΤ���𤤤����ޤ���
�����˻��ͤˤʤ�ޤ���
���줫��âµï¿½Üµï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ê¤¤ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Þ¤ï¿½ï¿½ï¿½
�ٶ��ˤʤ�ޤ�����