Apache 2.3向けモジュールを作成しました: mod_session_memcache
これまで数回に渡ってApache 2.3のmod_sessionとmod_auth_formを探ってきましたが、このたび、セッションストレージにmemcacheを使ってみてはどうかということで、新規のApacheモジュールとしてmod_session_memcacheを開発しました。こちらで公開いたします。
http://log.blog.klab.org/support/mod_session_memcache/mod_session_memcache-0.1.0.tar.gz
mod_session_memcache
ビルドにあたっては、Apache 2.3のソースパッケージを解凍した先のディレクトリでパッチ形式で扱います。まず、以前の紹介と同じようにhttpd本体と上記mod_session_memcacheのそれぞれtarballを取得して解凍したら、出来上がったディレクトリに移動してpatchコマンドを使用します。
$ tar zxvf mod_session_memcache-0.1.0.tar.gz $ tar zxvf httpd-2.3.5-alpha.tar.gz $ cd httpd-2.3.5-alpha $ patch -p1 < ../mod_session_memcache/httpd-2.3-mod-session-memcache.patch patching file configure patching file modules/session/config.m4 patching file modules/session/mod_session_memcache.c
あとは前回と同じようにaprとapr-utilを用意してconfigureしてmakeすれば、patchによってできたmod_session_memcache.cも一緒にビルドしてくれます。
httpd.confにはLoadModuleを追加し、前回SessionDBCookieNameディレクティブを追加した箇所を下記のように書き換えればOKです。また、セッションをDBに書き込んだり参照したりするためのDBDPrepareSQLディレクティブを設定しましたが、これらは不要になります。
LoadModule session_memcache_module modules/mod_session_memcache.so ... # 下記のDBDPrepareSQLは不要になります。 #DBDPrepareSQL "DELETE FROM session WHERE session_key = %s" deletesession #DBDPrepareSQL "UPDATE session SET session_value = %s, session_expire_time = %lld WHERE session_key = %s" updatesession #DBDPrepareSQL "INSERT INTO session (session_value, session_expire_time, session_key) values (%s, %lld, %s)" insertsession #DBDPrepareSQL "SELECT session_value FROM session WHERE session_key = %s AND (session_expire_time = 0 OR session_expire_time > %lld)" selectsession #DBDPrepareSQL "DELETE FROM session WHERE session_expire_time != 0 AND session_expire_time < %lld" cleansession ... <LocationMatch "/mypage/*"> ... Session On SessionMemcacheCookieName session path=/ # ←SessionDBCookieNameからの書き換え SessionMemcacheServer "localhost:11211" # ←追加 SessionMaxAge 10 ... </LodationMatch>
SessionMemcacheServerは、memcachedが動作しているサーバアドレスおよびポートを指定して下さい。SessionMaxAgeによってセッションのexpireも設定できます。
このモジュールの実装そのものはmod_session_dbdを流用し、データベースのアクセスのための関数(apr_dbd_xxx)をそれぞれmemcache APIに置き換えただけのもので非常にシンプルな作りになっていますが、充分動作します。よろしければ是非おためしください。
また、このmod_session_memcacheモジュールをApache開発チームのサードパーティー開発のモジュールデータベースに登録申請を出しました。
http://modules.apache.org/register.php
Apache Module Registry
登録が完了して受理されるかどうかは1週間ほどかかるとのことなので、こちらの結果も今後追ってご報告したいと思います。