26.4 モジュールのインストール、有効化および設定

Apacheソフトウェアはモジュール方式で構築されています。コアとなる一部のタスクを除いて、すべての機能はモジュールによって実現されています。この方法で、HTTPさえもモジュールによって処理されています(http_core)。

Apacheのモジュールは、ビルド時にApacheのバイナリに組み込むことも、実行時に動的にロードすることもできます。動的なモジュールのロード方法の詳細については、26.4.2項 「有効化と無効化」を参照してください。

Apacheモジュールは、以下の4つのカテゴリに分類されます。

基本モジュール

基本モジュールは、デフォルトでApacheにコンパイルされています。SUSE LinuxのApacheは、mod_so (他のモジュールのロードに必要)およびhttp_coreのみがコンパイルされています。その他のモジュールは、共有オブジェクトとして使用できます。これらのモジュールは、サーババイナリ自体には含まれず、実行時に含めることができます。

拡張モジュール

一般に、拡張とされているモジュールは、Apache ソフトウェアパッケージに含まれてはいますが、通常、サーバに静的にはコンパイルされていません。SUSE Linuxでは、これらはApacheに実行時にロードすることができる共有オブジェクトとして利用可能になっています。

外部モジュール

外部とラベルされているモジュールは、公式のApacheのディストリビューションには含まれていません。しかし、SUSE Linuxでは、それらのいくつかをすぐに使えるように用意しています。

マルチプロセシングモジュール

MPMは、Webサーバへのリクエストを受け取って処理する役割を果たすもので、Webサーバソフトウェアの中核となっています。

26.4.1 モジュールのインストール

デフォルトの方法でApacheをインストールした場合(26.1.2項 「インストール」を参照)、すべての基本と拡張モジュール、マルチプロセシングモジュールのプリフォークMPM、および外部モジュールのPHP5もインストールされます。

YaSTを起動し、[ソフトウェア]+[ソフトウェアの管理]の順に選択して、その他の外部モジュールをインストールできます。[フィルタ]+[検索]の順に選択し、[apache]を検索します。他のパッケージの中で、すべての使用可能な外部Apacheモジュールが検索結果のリストに表示されます。

26.4.2 有効化と無効化

YaSTを使用して、26.2.2.1項 「HTTP Server Wizard」で説明しているモジュール設定によってスクリプト言語モジュール(PHP5、Perl、PythonおよびRuby)を有効化または無効化できます。その他のすべてのモジュールは、26.2.2.2.2項 「サーバモジュール」で説明しているように有効化または無効化できます。

手動でモジュールを有効化または無効化する場合は、a2enmod mod_fooまたはa2dismod mod_fooコマンドをそれぞれ使用します。a2enmod -lは、すべての現在アクティブなモジュールのリストを出力します。

[Important]外部モジュール用の設定ファイルを含める

手動で外部モジュールを有効化した場合は、各設定ファイルがすべての仮想ホスト設定にロードされていることを確認します。外部モジュール用の設定ファイルは、/etc/apache2/conf.d/内に位置し、デフォルトではロードされません。各仮想ホスト上に同じモジュールが必要な場合は、このディレクトリ内の*.confを含めることができます。必要でない場合は、個々のファイルを含めます。その例として、/etc/apache2/vhost.d/vhost.templateを参照してください。

26.4.3 基本および拡張モジュール

すべての基本および拡張モジュールは、Apacheのマニュアルに詳しく説明されています。ここでは、主要なモジュールについて簡単に説明します。各モジュールの詳細については、http://httpd.apache.org/docs/2.2/mod/を参照してください。

mod_alias

AliasおよびRedirectディレクティブを提供します。これにより、特定のディレクトリにURIをマップ(Alias)、または要求されたURLを別の場所にリダイレクトできます。このモジュールは、デフォルトで有効です。

mod_auth*

認証モジュールは、以下の認証方法を提供します。mod_auth_basicは基本認証、またはmod_auth_digestはダイジェスト認証をそれぞれ提供します。Apache 2.2のダイジェスト認証は実験的なものであると考えなくてはなりません。

mod_auth_basicおよびmod_auth_digestは、認証プロバイダモジュールのmod_authn_* (テキストファイルベースの認証用のmod_authn_fileなど)および認証モジュールのmod_authz_* (ユーザ認証用のmod_authz_user) と組み合わせる必要があります。

この項目の詳細は、http://httpd.apache.org/docs/2.2/howto/auth.htmlの「Authentication howto」で説明されています。

mod_autoindex

Autoindexは、インデックスファイル(index.htmlなど)が存在しない場合にディレクトリリストを生成します。これらのインデックスのルックアンドフィールは設定可能です。このモジュールは、デフォルトで有効です。ただし、ディレクトリリストは、デフォルトでOptionsディレクティブを経由して無効化されています。仮想ホスト設定でこの設定を上書きします。このモジュール用のデフォルト設定は、/etc/apache2/mod_autoindex-defaults.confに存在します。

mod_cgi

mod_cgiは、CGIスクリプトを実行するのに必要です。このモジュールは、デフォルトで有効です。

mod_deflate

このモジュールを使用して、配信前にファイルタイプを圧縮するようにApacheを設定できます。

mod_dir

mod_dirは、DirectoryIndexディレクティブを提供します。これを使用して、ディレクトリが要求されたときに(デフォルトではindex.html)自動的に配信されるファイルを設定できます。ディレクトリ要求に末尾のスラッシュが含まれていない場合にURIを修正するための自動リダイレクトも提供します。このモジュールは、デフォルトで有効です。

mod_expires

mod_expiresを使用して、Expiresヘッダを送信することにより、プロキシとブラウザキャッシュがドキュメントを更新する頻度を制御できます。このモジュールは、デフォルトで有効です。

mod_include

mod_includeは、動的にHTMLページを生成するための基本機能を提供するSSI (Server-Side Includes)を使用できるようにします。このモジュールは、デフォルトで有効です。

mod_info

http://localhost/server-info/にサーバ設定の包括的な概要を表示します。 セキュリティ上の理由から、このURLへのアクセスは常に制限されます。デフォルトでは、localhostのみ、このURLへのアクセスが許可されます。mod_infoは、/etc/apache2/mod_info.confで設定されます。

mod_log_config

このモジュールを使用して、Apacheログファイルの形式を設定できます。このモジュールは、デフォルトで有効です。

mod_mime

mimeモジュールは、ファイル名の拡張子(HTMLドキュメント用のtext/htmlなど)に基づき、適切なMIMEヘッダを使用してファイルが配信されるようにします。このモジュールは、デフォルトで有効です。

mod_negotiation

コンテンツネゴシエーションに必要です。詳細については、http://httpd.apache.org/docs/2.2/content-negotiation.htmlを参照してください。このモジュールは、デフォルトで有効です。

mod_rewrite

mod_aliasの機能を提供しますが、それ以外の機能も提供し、柔軟性を与えます。mod_rewriteを使用して、複数の規則、要求ヘッダなどに基づいてURLをリダイレクトできます。

mod_speling

mod_spelingは、大文字小文字の違いなど、URLの表記エラーの訂正を自動的に試みます。

mod_ssl

Webサーバとクライアント間の暗号化接続を有効化します。詳細については、26.6項 「SSLをサポートするセキュアWebサーバのセットアップ」を参照してください。このモジュールは、デフォルトで有効です。

mod_status

サーバの動作およびパフォーマンスに関する情報をhttp://localhost/server-status/に表示します。 セキュリティ上の理由から、このURLへのアクセスは常に制限されます。デフォルトでは、localhostのみ、このURLへのアクセスが許可されます。mod_statusは、/etc/apache2/mod_status.confで設定されます。

mod_suexec

mod_suexecは、CGIスクリプトを別のユーザとグループで実行できるようにします。このモジュールは、デフォルトで有効です。

mod_userdir

~user/の下に、ユーザ固有のディレクトリを用意します。UserDirディレクティブを設定で指定する必要があります。このモジュールは、デフォルトで有効です。

26.4.4 マルチプロセシングモジュール

SUSE Linuxには、Apacheで使用するための2つのマルチプロセシングモジュール(MPM)が用意されています。

26.4.4.1 プリフォークMPM

プリフォークMPMは、スレッド対応でない、プリフォークWebサーバを実装します。Webサーバは、それぞれのリクエストを分離し、個別の子プロセスを分岐することによって処理する、Apacheバージョン1.xと同様の動作を行います。これにより、問題のあるリクエストが他のものに影響することがなくなるので、Webサーバのロックアップを避けられます。

プロセスベースのアプローチによって安定性がもたらされますが、プリフォークMPMは、もう一方のワーカーMPMよりも多くのシステムリソースを消費します。プリフォークMPMは、UnixベースのオペレーティングシステムでのデフォルトのMPMとみなされています。

[Important]このドキュメントでのMPM

このドキュメントでは、ApacheがプリフォークMPMで使用されていることを仮定しています。

26.4.4.2 ワーカーMPM

ワーカーMPMは、マルチスレッド対応のWebサーバを提供します。スレッドとは、「軽い」形態のプロセスです。プロセスよりもスレッドが優れている点は、リソースの消費が少ないことです。ワーカーMPMは、子プロセスを分岐する代わりに、サーバプロセスでスレッドを使用することによってリクエストを処理します。プリフォークした子プロセスは複数のスレッドになります。このアプローチでは、プリフォークMPMの場合よりもシステムリソースの消費が少なくなるので、Apacheの性能が良くなります。

主要な短所の1つは、ワーカーMPMの安定性に関するものです。1つのスレッドが壊れると、プロセスのすべてのスレッドが影響を受けます。最悪の場合には、サーバがクラッシュすることがあります。特に、ApacheでCGI (Common Gateway Interface)を使用している場合、負荷が大きくなると、スレッドがシステムリソースと通信できなくなって、内部サーバエラーが生じることがあります。ワーカーMPMを使用すべきでないという意見の別の根拠は、利用できるApacheのモジュールのすべてがスレッドセーフになっているわけではなく、そのためワーカーMPMと組み合わせて使用することはできないという点です。

[Warning]MPMと組み合わせてPHPモジュールを使用する

利用可能なPHPモジュールのすべてがスレッドセーフになっているわけではありません。ワーカーMPMとmod_phpを組み合わせることは、絶対に避けてください。

26.4.5 外部モジュール

ここでは、SUSE Linuxに付属しているすべての外部モジュールを記載しています。モジュールのドキュメントは、記載のディレクトリ内に存在します。

FastCGI

FastCGIは、言語に依存せず、スケーラブルで、サーバ固有のAPIの制限がないハイパフォーマンスを提供するCGIに対してオープンな拡張子です。FastCGIアプリケーションは永続的なので高速に処理します。要求ごとの起動や初期化のオーバーヘッドがありません。

パッケージ名apache2-mod_fastcgi
設定ファイル:/etc/apache2/conf.d/mod_fastcgi.conf
その他の情報:/usr/share/doc/packages/apache2-mod_fastcgi
mod_perl

mod_perlは、埋め込まれているインタプリタでPerlスクリプトを実行できるようにします。サーバに埋め込まれている永続的なインタプリタにより、外部インタプリタの起動のオーバーヘッド、およびPerlの起動時間のペナルティを回避できます。

パッケージ名apache2-mod_perl
設定ファイル:/etc/apache2/conf.d/mod_perl.conf
その他の情報:/usr/share/doc/packages/apache2-mod_perl
mod_php5

PHPは、サーバ側クロスプラットフォームのHTML埋込みスクリプト言語です。

パッケージ名apache2-mod_php5
設定ファイル:/etc/apache2/conf.d/php5.conf
その他の情報:/usr/share/doc/packages/apache2-mod_php5
mod_python

mod_pythonは、Apache HTTPサーバへのPythonの埋込みができるようにし、Webベースのアプリケーションの設計で、さらに柔軟性を持たせ、パフォーマンスを向上させます。

パッケージ名apache2-mod_python
その他の情報:/usr/share/doc/packages/apache2-mod_python
mod_ruby

mod_rubyは、Apache WebサーバにRubyインタプリタを埋め込み、RubyのCGIスクリプトをネイティブに実行することを可能にします。これらのスクリプトは、mod_rubyがない場合に比べてかなり速く起動するようになります。

パッケージ名apache2-mod_ruby
その他の情報:/usr/share/doc/packages/apache2-mod_ruby
mod_jk-ap20

このモジュールは、ApacheとTomcat Servlet Container間の接続を確立します。

パッケージ名mod_jk-ap20
その他の情報:/usr/share/doc/packages/mod_jk-ap20

26.4.6 コンパイル

上級のユーザは、カスタムのモジュールを記述してApacheを拡張することができます。Apache用のモジュールを開発したり、サードパーティのモジュールをコンパイルしたりするには、apache2-develパッケージ、および対応する開発ツールが必要です。apache2-develには、Apache用の追加モジュールのコンパイルに必要なapxs2ツールも含まれています。

apxs2は、ソースコードからモジュールをコンパイルし、インストールすることを可能にします(設定ファイルへの必要な変更も含みます)。 これは、実行時にApacheにロードされる、ダイナミック共有オブジェクト (DSO)を作成します。

apxs2バイナリは、/usr/sbinの下層にあります

  • /usr/sbin/apxs2—MPMと共に動作する拡張モジュールを構築するのに適しています。インストール場所は/usr/lib/apache2です。

  • /usr/sbin/apxs2-prefork—プリフォークMPMモジュールに適しています。インストール場所は/usr/lib/apache2-preforkです。

  • /usr/sbin/apxs2-worker—ワーカーMPMモジュールに適しています。

apxs2は、どのMPMに対しても使用できるようにモジュールをインストールします。他の2つのプログラムは、それぞれのMPMに対してのみ使用できるようにモジュールをインストールします。apxs2は、/usr/lib/apache2にモジュールをインストールし、apxs2-preforkおよびapxs2-workerは、/usr/lib/apache2-preforkまたは/usr/lib/apache2-workerにモジュールをインストールします。

cd /path/to/module/source; apxs2 -cia mod_foo.cコマンド(-cはモジュールをコンパイル、-iはモジュールをインストール、-aはモジュールを有効化する)を使用して、ソースコードからモジュールをインストールし、有効化します。apxs2のその他のオプションについては、apxs2(1) manページを参照してください。