このページでは「Apacheモジュールプログラミングガイド」(技術評論社 ISBN4-7741-1799-4 2003/08)の各章で使用しているサンプルソースコードをまとめています。
使用条件など
各ソースコードはBSDライクなライセンスの元、自由に参照・修整・配布することができます。広告条件などの制約は設けていません。詳しくはパッケージのLICENSEファイルを参照してください。各ソースコードはMac OS X 10.1.5で開発し、FreeBSD 4.7-STABLE、Linux 2.4.2で動作確認を行っています。また、各ソースコードは書籍のサンプルを目的に記述しているため、実際の運用には適さない場合があります。
ダウンロード: ap_mod_prog-src-1.1.tar.gz
書籍の詳細: WebエンジニアのためのApacheモジュールプログラミングガイド
内容と解説
第1章 イントロダクション
src/benchmark/benchmark.pl src/benchmark/benchmark.c src/benchmark/benchmark.php src/benchmark/Benchmark.java src/benchmark/mod_benchmark/mod_benchmark.c現在時刻を"<li>Mon Jun 02 03:00:18 JST 2003</li>\n"の形式に50回整形し、クライアントに送信する。
CGI(Perl, C)、PHP、Java Servlet、mod_perl(Apache::Registry)、Apache moduleそれぞれの環境でのベンチマークテストに使用。
第2章 Hello World!
src/helloworld/mod_helloworld.capxsコマンドで作成したApacheモジュールの雛型。
第3章 Apacheの提供する機能
src/sendfile/mod_sendfile.cブラウザに/etc/servicesファイルの内容を送信する。
第4章 コンテンツハンドラ
src/reqinfo1/mod_reqinfo.c src/reqinfo2/mod_reqinfo.cリクエストの内容やクライアントの情報を取得・表示する。
src/parse_param/mod_parse_param.cQuery-stringなどで送信されたリクエストパラメータを解析し、取得・表示する。
src/ext_redirect/mod_ext_redirect.cHTTPのリダイレクションメカニズムを使用して、クライアントを別のURLに転送する。
src/int_redirect/mod_int_redirect.cApacheの内部転送メカニズムを使用して、クライアントに別のURIのコンテンツを送信する。
第5章 設定ファイルのカスタマイズ
src/simple_conf/mod_simple_conf.cApacheの設定ファイルで使用できるディレクティブ SetMessage を新たに定義して、設定値を参照する。
第6章 その他のリクエストフェーズ
src/agentdir/mod_agentdir.cリクエストしてきたクライアントのUser-Agentヘッダに基づいて、ドキュメントルートを動的に切り替える。ap_translate_nameフェーズ(URIから実ファイルへの変換)のデモ。
src/access_timeout/mod_access_timeout.c src/access_timeout/settimer.cgiHTTP Cookieを使用して、一定時間アクセスを許可する。ap_check_accessフェーズ(アクセス制御)のデモ。
src/auth_badpasswd/mod_auth_badpasswd.cユーザ名とパスワードが同一の場合に認証する。ap_check_user_idフェーズ(ユーザIDの確認)のデモ。
src/auth_regex/mod_auth_regex.c指定した正規表現に一致するユーザへのアクセスを許可する。ap_check_authフェーズ(アクセス権の確認)のデモ。
src/mime_skel/mod_mime_skel.cContent-Type, Content-Language, Content-Encoding, コンテンツハンドラを設定する。ap_find_typesフェーズ(コンテンツタイプの決定)のデモ。
src/guess_charset/mod_guess_charset.chtmlファイルの漢字コードを自動判別し、Charsetオプションを付加する。ap_run_fixupsフェーズ(コンテンツ生成直前の微調整)のデモ。
src/log_header/mod_log_header.c送受信しているHTTPヘッダを、専用のログに出力する。ap_log_transactionフェーズ(ログの出力)のデモ。
第7章 コンテンツハンドラ応用
src/conditional_request/mod_conditional_request.cコンテンツの更新日時等に基づいた条件リクエストを処理する。
src/mysql_connect/mod_mysql_connect.clibmysqlclientライブラリを使用して、MySQLに接続する。ビルドに際してMySQLの開発パッケージが必要。
src/mysql_keep_connect/mod_mysql_keep_connect.cMySQLに永続的に接続する。ビルドに際してMySQLの開発パッケージが必要。
src/pg_connect/mod_pg_connect.clibpqライブラリを使用して、PostgreSQLに接続する。ビルドに際してPostgreSQLの開発パッケージが必要。(このコードは本文中では使用していない)
src/pg_keep_connect/mod_pg_keep_conect.cPostgreSQLに永続的に接続する。ビルドに際してPostgreSQLの開発パッケージが必要。(このコードは本文中では使用していない)
src/pluginclude/mod_pluginclude.c src/pluginclude/echo.c src/pluginclude/dir.c src/pluginclude/httpget.cHTMLに埋め込んだコマンドを解釈し、データを動的に埋め込みながら送信する。ダイナミックリンクインターフェイスを使用してモジュールへ機能をPluginするデモ。
第8章 セキュリティ
src/encrypt_store/mod_encrypt_store.cクライアントから送信されたメッセージを、指定された秘密鍵で暗号化し格納する。opensslのlibcryptoライブラリを使用し、対称鍵暗号で暗号・復号する。ビルドに際しては OpenSSL の開発パッケージが必要。
src/access_timeout_hmac/mod_access_timeout_hmac.cHTTP Cookieを使用して、一定時間アクセスを許可する。第6章で使用したmod_access_timeoutモジュールのHMAC版。opensslのlibcryptoライブラリを使用する。ビルドに際しては OpenSSL の開発パッケージが必要。
第9章 Apache 2.0.xにおけるモジュールの開発
src/hello_apache2/mod_hello_apache2.cApache 2.0.x付属のapxsコマンドで生成した、Apacheモジュールの雛型。
Appendix libapreq - Generic Apache Request Library
src/send_cookie/mod_send_cookie.clibapreqライブラリを使用してHTTP Cookieを整形・送信する。ビルドに際しては libapreq ライブラリが必要。
src/get_cookie/mod_get_cookie.clibapreqライブラリを使用してHTTP Cookieを受信・解析する。ビルドに際しては libapreq ライブラリが必要。