9.7. DSO(Dynamic Shared Object)の追加と削除

Apache の各機能はモジュールとして提供されています。これらのモジュールは、コンパイル時に Apache に組み込むことも、シェアドオブジェクトとして Apache の起動時にメモリにロードすることも可能です。このように、Apache の API に準拠して作成されたシェアドオブジェクトは、DSO(Dynamic Shared Object)と呼ばれます。

Apache のコンパイル時に組み込まれたモジュールは、以下のコマンドで確認することができます。

# /user/sbin/httpd -l
Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c
# /usr/sbin/httpd.worker -l
Compiled in modules:
  core.c
  worker.c
  http_core.c
  mod_so.c

mod_so.c が、Apache の起動時に DSO モジュールを読み込むためのメカニズムを提供しています。このモジュールの機能により Apache をリコンパイルせずに DSO モジュールを追加、または削除することができます。実際に Apache の起動時に読み込まれる DSO モジュールは、/etc/http/conf/modules で指定されています。Turbolinux 10 Server の /etc/http/conf/modules の内容は以下の通りです。

# Module list for httpd
#  This file was generated by /usr/lib/httpd/scripts/update-module-list. Don't edit by hand.

# modules provided by httpd.apache.org.:
LoadModule access_module        /usr/lib/httpd/modules/mod_access.so
LoadModule auth_module          /usr/lib/httpd/modules/mod_auth.so
LoadModule auth_anon_module     /usr/lib/httpd/modules/mod_auth_anon.so
LoadModule auth_dbm_module      /usr/lib/httpd/modules/mod_auth_dbm.so
LoadModule auth_digest_module   /usr/lib/httpd/modules/mod_auth_digest.so
LoadModule file_cache_module    /usr/lib/httpd/modules/mod_file_cache.so
LoadModule cache_module         /usr/lib/httpd/modules/mod_cache.so
LoadModule disk_cache_module    /usr/lib/httpd/modules/mod_disk_cache.so
LoadModule mem_cache_module     /usr/lib/httpd/modules/mod_mem_cache.so
LoadModule include_module       /usr/lib/httpd/modules/mod_include.so
LoadModule deflate_module       /usr/lib/httpd/modules/mod_deflate.so
LoadModule log_config_module    /usr/lib/httpd/modules/mod_log_config.so
LoadModule log_forensic_module  /usr/lib/httpd/modules/mod_log_forensic.so
LoadModule env_module           /usr/lib/httpd/modules/mod_env.so
LoadModule mime_magic_module    /usr/lib/httpd/modules/mod_mime_magic.so
LoadModule cern_meta_module     /usr/lib/httpd/modules/mod_cern_meta.so
LoadModule expires_module       /usr/lib/httpd/modules/mod_expires.so
LoadModule headers_module       /usr/lib/httpd/modules/mod_headers.so
LoadModule usertrack_module     /usr/lib/httpd/modules/mod_usertrack.so
LoadModule unique_id_module     /usr/lib/httpd/modules/mod_unique_id.so
LoadModule setenvif_module      /usr/lib/httpd/modules/mod_setenvif.so
LoadModule proxy_module         /usr/lib/httpd/modules/mod_proxy.so
LoadModule proxy_connect_module /usr/lib/httpd/modules/mod_proxy_connect.so
LoadModule proxy_ftp_module     /usr/lib/httpd/modules/mod_proxy_ftp.so
LoadModule proxy_http_module    /usr/lib/httpd/modules/mod_proxy_http.so
LoadModule mime_module          /usr/lib/httpd/modules/mod_mime.so
LoadModule dav_module           /usr/lib/httpd/modules/mod_dav.so
LoadModule status_module        /usr/lib/httpd/modules/mod_status.so
LoadModule autoindex_module     /usr/lib/httpd/modules/mod_autoindex.so
LoadModule asis_module          /usr/lib/httpd/modules/mod_asis.so
LoadModule info_module          /usr/lib/httpd/modules/mod_info.so
LoadModule suexec_module        /usr/lib/httpd/modules/mod_suexec.so
LoadModule cgi_module           /usr/lib/httpd/modules/mod_cgi.so
LoadModule cgid_module          /usr/lib/httpd/modules/mod_cgid.so
LoadModule dav_fs_module        /usr/lib/httpd/modules/mod_dav_fs.so
LoadModule vhost_alias_module   /usr/lib/httpd/modules/mod_vhost_alias.so
LoadModule negotiation_module   /usr/lib/httpd/modules/mod_negotiation.so
LoadModule dir_module           /usr/lib/httpd/modules/mod_dir.so
LoadModule imap_module          /usr/lib/httpd/modules/mod_imap.so
LoadModule actions_module       /usr/lib/httpd/modules/mod_actions.so
LoadModule speling_module       /usr/lib/httpd/modules/mod_speling.so
LoadModule userdir_module       /usr/lib/httpd/modules/mod_userdir.so
LoadModule alias_module         /usr/lib/httpd/modules/mod_alias.so
LoadModule rewrite_module       /usr/lib/httpd/modules/mod_rewrite.so

このように、各 DSO モジュールを読み込むには、LoadModule ディレクティブを使用します。書式は以下の通りです。

LoadModule module filename

filename に指定されたオブジェクトファイルを module というモジュール識別子で有効にします。filename には、モジュールのパスを指定します。

ティップ

Apache1.3 までは、モジュールをロードする順序の指定が非常に重要でしたが、Apache2.0 では Apache 自身が自動的に順序を解決します。それに伴い、Addmodule、ClearModuleList の両ディレクティブが廃止されています。

Turbolinux 10 Server の初期設定では、全てのモジュールを Apache の起動時に読み込んでいます。不要なモジュールは、行頭にコメント記号(#)を記述して、無効にすることができます。例えば、mod_status を無効にするには、テキストエディタで次の行をコメントにします。

#LoadModule status_module        /usr/lib/httpd/modules/mod_status.so

これで、Apache を再起動することにより mod_status が無効になります。設定を変更した場合は、必ず Apache を再起動してください。Apache は起動時に設定ファイルを読み込みますので、再起動しないと設定ファイルの変更は Apache の動作に反映されません。

また、Turbolinux 10 Server には Apache から標準で提供されている DSO モジュールの他に、以下のような Apache 以外のパッケージから提供されている DSO モジュールも収録されています。

表 9-5. Apache 以外のパッケージから提供されている DSO モジュール

mod_perlCGI 等で利用される Perl スクリプトを高速に動作させるためのモジュール
mod_rubymod_perl と同様に ruby スクリプトを高速に動作させるためのモジュール
mod_phpApache で PHP を利用するためのモジュール
mod_encodingApache で HTTP リクエストおよびヘッダに含まれる文字コードの変換機能を提供 するモジュール
mod_pythonApache で Python を利用するためのモジュール

これらのモジュールを追加するための LoadModule ディレクティブの指定は、/etc/http/conf.d/ ディレクトリ以下の拡張子 .conf のファイルに記述されています。例えば、/etc/http/conf.d/php4.conf には、mod_php4.so モジュールを読み込むための指定が以下のように記述されています。

LoadModule php4_module          /usr/lib/httpd/modules/mod_php4.so

ティップ

/etc/http/conf/modules や /etc/http/conf.d/*.conf は、/etc/httpd/conf/httpd.conf の Include ディレクティブの指定により、読み込まれています。

Include conf/modules
Include conf.d/*.conf