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 モジュールを追加、または削除することができます。組み込まれているモジュール(static)および読み込まれているDSOモジュール(shared)は以下のコマンドで確認できます。

# /user/sbin/httpd -M
Loaded Modules:
 core_module (static)
 mpm_worker_module (static)
 http_module (static)
 so_module (static)
 auth_basic_module (shared)
 auth_digest_module (shared)
 authn_file_module (shared)
 authn_alias_module (shared)
 authn_anon_module (shared)
 authn_dbm_module (shared)
 authn_default_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 authz_owner_module (shared)
 authz_groupfile_module (shared)
 authz_dbm_module (shared)
 authz_default_module (shared)
 ldap_module (shared)
 authnz_ldap_module (shared)
 include_module (shared)
 log_config_module (shared)
 logio_module (shared)
 env_module (shared)
 ext_filter_module (shared)
 mime_magic_module (shared)
 expires_module (shared)
 deflate_module (shared)
 headers_module (shared)
 usertrack_module (shared)
 setenvif_module (shared)
 mime_module (shared)
 dav_module (shared)
 status_module (shared)
 autoindex_module (shared)
 info_module (shared)
 dav_fs_module (shared)
 vhost_alias_module (shared)
 negotiation_module (shared)
 dir_module (shared)
 actions_module (shared)
 speling_module (shared)
 userdir_module (shared)
 alias_module (shared)
 rewrite_module (shared)
 proxy_module (shared)
 proxy_balancer_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_connect_module (shared)
 cache_module (shared)
 suexec_module (shared)
 disk_cache_module (shared)
 file_cache_module (shared)
 mem_cache_module (shared)
 cgi_module (shared)
 auth_kerb_module (shared)
 perl_module (shared)
 ruby_module (shared)
 php5_module (shared)
 proxy_ajp_module (shared)
 ssl_module (shared)
Syntax OK
# /usr/sbin/httpd.worker -M
Loaded Modules:
 core_module (static)
 mpm_worker_module (static)
 http_module (static)
 so_module (static)
 auth_basic_module (shared)
 auth_digest_module (shared)
 authn_file_module (shared)
 authn_alias_module (shared)
 authn_anon_module (shared)
 authn_dbm_module (shared)
 authn_default_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 authz_owner_module (shared)
 authz_groupfile_module (shared)
 authz_dbm_module (shared)
 authz_default_module (shared)
 ldap_module (shared)
 authnz_ldap_module (shared)
 include_module (shared)
 log_config_module (shared)
 logio_module (shared)
 env_module (shared)
 ext_filter_module (shared)
 mime_magic_module (shared)
 expires_module (shared)
 deflate_module (shared)
 headers_module (shared)
 usertrack_module (shared)
 setenvif_module (shared)
 mime_module (shared)
 dav_module (shared)
 status_module (shared)
 autoindex_module (shared)
 info_module (shared)
 dav_fs_module (shared)
 vhost_alias_module (shared)
 negotiation_module (shared)
 dir_module (shared)
 actions_module (shared)
 speling_module (shared)
 userdir_module (shared)
 alias_module (shared)
 rewrite_module (shared)
 proxy_module (shared)
 proxy_balancer_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_connect_module (shared)
 cache_module (shared)
 suexec_module (shared)
 disk_cache_module (shared)
 file_cache_module (shared)
 mem_cache_module (shared)
 cgi_module (shared)
 auth_kerb_module (shared)
 perl_module (shared)
 ruby_module (shared)
 php5_module (shared)
 proxy_ajp_module (shared)
 ssl_module (shared)
Syntax OK

ティップ

“-M”は、Apache2.2 から追加されたオプションです。

実際に Apache の起動時に読み込まれる DSO モジュールは、Turbolinux 11 Server では、/etc/http/conf/httpd.conf に以下の通り指定されています。

# 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 auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule info_module modules/mod_info.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule info_module modules/mod_info.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule cgi_module modules/mod_cgi.so
#
# The following modules are not loaded by default:
#
#LoadModule cern_meta_module modules/mod_cern_meta.so
#LoadModule asis_module modules/mod_asis.so

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

LoadModule module filename

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

ティップ

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

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

# LoadModule status_module modules/mod_status.so

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

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

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

mod_auth_kerbケルベロス認証のためのモジュール
mod_perlCGI 等で利用される Perl スクリプトを高速に動作させるためのモジュール
mod_rubymod_perl と同様に ruby スクリプトを高速に動作させるためのモジュール
mod_php5-non_zts.soMPM が prefork の場合の Apache で PHP を利用するためのモジュール

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

LoadModule perl_module          modules/mod_perl.so

ティップ

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

Include conf.d/*.conf

ティップ

Apache2.2 では認証に関するモジュールの名称の変更や分割がおこなわれてています。詳細は 項9.26 を参照してください。