Apacheソフトウェアは、モジュール構成で用意されており、一部の主要タスクを除いてはモジュールにより処理されます。この方法で、HTTPさえもモジュールによって処理されています(http_core)。
Apacheのモジュールは、ビルド時にApacheのバイナリに組み込むことも、実行時に動的にロードすることもできます。動的なモジュールのロード方法の詳細については、セクション 27.4.2, 有効化と無効化を参照してください。
Apacheモジュールは、次の4つのカテゴリに分類されます。
基本モジュールは、デフォルトでApacheにコンパイルされています。SUSE LinuxのApacheは、mod_so(他のモジュールのロードに必要)およびhttp_coreのみがコンパイルされています。他のモジュールは、サーバのバイナリに入れる代わりに、ランタイム時に入れるように共有オブジェクトとして利用できます。
一般に、拡張とされているモジュールは、Apache ソフトウェアパッケージに含まれてはいますが、通常、サーバに静的にはコンパイルされていません。SUSE Linux Enterprise Serverでは、これらは実行時にApacheにロードすることができる共有オブジェクトとして利用可能になっています。
外部とラベルされているモジュールは、公式のApacheのディストリビューションには含まれていません。SUSE Linux Enterprise Serverでは、それらのいくつかをすぐに使えるように用意しています。
MPMは、Webサーバへのリクエストを受け取って処理する役割を果たすもので、Webサーバソフトウェアの中核となっています。
デフォルトの方法でApacheをインストールした場合(セクション 27.1.2, インストールを参照してください)、すべての基本と拡張モジュール、マルチプロセシングモジュールのプリフォークMPM、および外部モジュールのmod_php5およびmod_pythonもインストールされます。
YaSTを起動し、の順に選択して、その他の外部モジュールをインストールできます。の順に選択し、[apache]を検索します。他のパッケージの中で、すべての使用可能な外部Apacheモジュールが検索結果のリストに表示されます。
YaSTを使用して、HTTP Server Wizardで説明しているモジュール設定によってスクリプト言語モジュール(PHP5、Perl、およびPython)を有効化または無効化できます。その他のすべてのモジュールは、サーバモジュールで説明しているように有効化または無効化できます。
手動でモジュールを有効化または無効化する場合は、a2enmod mod_fooまたはa2dismodmod_fooコマンドをそれぞれ使用します。a2enmod -lは、すべての現在アクティブなモジュールのリストを出力します。
重要: 外部モジュール用の設定ファイルを含める
手動で外部モジュールを有効化した場合は、各設定ファイルがすべての仮想ホスト設定にロードされていることを確認します。外部モジュール用の設定ファイルは、/etc/apache2/conf.d/内に位置し、デフォルトではロードされません。各仮想ホスト上に同じモジュールが必要な場合は、このディレクトリ内の*.confを含めることができます。必要でない場合は、個々のファイルを含めます。その例として、「/etc/apache2/vhost.d/vhost.template」を参照してください。
すべての基本および拡張モジュールは、Apacheのマニュアルに詳しく説明されています。ここでは、主要なモジュールについて簡単に説明します。各モジュールの詳細については、http://httpd.apache.org/docs/2.2/mod/を参照してください。
特定のMIMEタイプ(application/pdfなど)、特定の拡張子を持つファイル(.rpmなど)、または特定の要求方法(GETなど)が要求された場合に、常にスクリプトを実行する方法を提供します。このモジュールは、デフォルトで有効です。
AliasおよびRedirectディレクティブを提供します。これにより、特定のディレクトリにURIをマップ(Alias)、または要求されたURLを別の場所にリダイレクトできます。このモジュールは、デフォルトで有効です。
認証モジュールは、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
で説明されています。
Autoindexは、インデックスファイル(index.htmlなど)が存在しない場合にディレクトリリストを生成します。これらのインデックスのルックアンドフィールは設定可能です。このモジュールは、デフォルトで有効です。ただし、ディレクトリリストは、デフォルトでOptionsディレクティブを経由して無効化されています。仮想ホスト設定でこの設定を上書きします。このモジュール用のデフォルト設定は、/etc/apache2/mod_autoindex-defaults.confに存在します。
mod_cgiは、CGIスクリプトを実行するのに必要です。このモジュールは、デフォルトで有効です。
このモジュールを使用して、配信前にファイルタイプを圧縮するようにApacheを設定できます。
mod_dirは、DirectoryIndexディレクティブを提供します。これを使用して、ディレクトリが要求されたときに(デフォルトではindex.html)自動的に配信されるファイルを設定できます。ディレクトリ要求に末尾のスラッシュが含まれていない場合にURIを修正するための自動リダイレクトも提供します。このモジュールは、デフォルトで有効です。
CGIスクリプトやSSIページに渡す環境を制御します。環境変数を設定、設定解除したり、httpdプロセスを起動したシェルから渡すことができます。このモジュールは、デフォルトで有効です。
mod_expiresを使用して、Expiresヘッダを送信することにより、プロキシとブラウザキャッシュがドキュメントを更新する頻度を制御できます。このモジュールは、デフォルトで有効です。
mod_includeは、動的にHTMLページを生成するための基本機能を提供するSSI (Server-Side Includes)を使用できるようにします。このモジュールは、デフォルトで有効です。
http://localhost/server-info/にサーバ設定の包括的な概要を表示します。セキュリティ上の理由から、このURLへのアクセスは常に制限されます。デフォルトでは、localhostのみ、このURLへのアクセスが許可されます。mod_infoは、/etc/apache2/mod_info.confで設定されます。
このモジュールを使用して、Apacheログファイルの書式を設定できます。このモジュールは、デフォルトで有効です。
mimeモジュールは、ファイル名の拡張子(HTMLドキュメント用のtext/htmlなど)に基づき、適切なMIMEヘッダを使用してファイルが配信されるようにします。このモジュールは、デフォルトで有効です。
コンテンツネゴシエーションに必要です。詳細については、http://httpd.apache.org/docs/2.2/content-negotiation.htmlを参照してください。このモジュールは、デフォルトで有効です。
mod_aliasの機能を提供しますが、それ以外の機能も提供し、柔軟性を与えます。mod_rewriteを使用して、複数の規則、要求ヘッダなどに基づいてURLをリダイレクトできます。
クライアントから送信されたブラウザ文字列やIPアドレスなどの、クライアントからのリクエスト詳細に基づいて環境変数を設定します。このモジュールは、デフォルトで有効です。
mod_spelingは、大文字小文字の違いなど、URLの表記エラーの訂正を自動的に試みます。
Webサーバとクライアント間の暗号化接続を有効化します。詳細については、セクション 27.6, SSLをサポートするセキュアWebサーバのセットアップを参照してください。このモジュールは、デフォルトで有効です。
サーバの動作およびパフォーマンスに関する情報をhttp://localhost/server-status/に表示します。セキュリティ上の理由から、このURLへのアクセスは常に制限する必要があります。デフォルトでは、localhostのみ、このURLへのアクセスが許可されます。mod_statusは、/etc/apache2/mod_status.confで設定されます。
mod_suexecは、CGIスクリプトを別のユーザとグループで実行できるようにします。このモジュールは、デフォルトで有効です。
~user/の下に、ユーザ固有のディレクトリを用意します。UserDirディレクティブを設定で指定する必要があります。このモジュールは、デフォルトで有効です。
SUSE Linux Enterprise Serverには、Apacheで使用するための2つのMPM(マルチプロセシングモジュール)が用意されています。
プリフォークMPMは、スレッド対応でない、プリフォークWebサーバを実装します。Webサーバは、それぞれのリクエストを分離し、個別の子プロセスを分岐することによって処理する、Apacheバージョン1.xと同様の動作を行います。これにより、問題のあるリクエストが他のものに影響することがなくなるので、Webサーバのロックアップを避けられます。
プロセスベースのアプローチによって安定性がもたらされますが、プリフォークMPMは、もう一方のワーカーMPMよりも多くのシステムリソースを消費します。プリフォークMPMは、UnixベースのオペレーティングシステムでのデフォルトのMPMとみなされています。
重要: このドキュメントでのMPM
このドキュメントでは、ApacheがプリフォークMPMで使用されていることを仮定しています。
ワーカーMPMは、マルチスレッド対応のWebサーバを提供します。スレッドとは、軽い
形態のプロセスです。プロセスよりもスレッドが優れている点は、リソースの消費が少ないことです。ワーカーMPMは、子プロセスを分岐する代わりに、サーバプロセスでスレッドを使用することによってリクエストを処理します。プリフォークした子プロセスは複数のスレッドになります。このアプローチでは、プリフォークMPMの場合よりもシステムリソースの消費が少なくなるので、Apacheの性能が良くなります。
主な欠点としては、ワーカーMPMの安定性の問題が挙げられます。スレッドが壊れた場合、プロセスのすべてのスレッドに影響してしまいます。最悪の場合には、サーバがクラッシュすることがあります。特に、ApacheでCGI (Common Gateway Interface)を使用している場合、負荷が大きくなると、スレッドがシステムリソースと通信できなくなって、内部サーバエラーが生じることがあります。ワーカーMPMを使用すべきでないという意見の別の根拠は、利用できるApacheのモジュールのすべてがスレッドセーフになっているわけではなく、そのためワーカーMPMと組み合わせて使用することはできないという点です。
警告: MPMと組み合わせてPHPモジュールを使用する
利用可能なPHPモジュールのすべてがスレッドセーフになっているわけではありません。ワーカーMPMとmod_phpを組み合わせないでください。
ここでは、SUSE Linux Enterprise Serverに付属しているすべての外部モジュールのリストを示します。モジュールのドキュメントは、記載のディレクトリ内に存在します。
mod_php5やmod_perlなどのモジュールが処理する各CGIスクリプトに対して、Novell AppArmor制限を提供するために、Apacheにサポートを追加します。
mod_monoを使用すると、サーバでASP.NETページを実行できます。
mod_perlは、埋め込まれているインタプリタでPerlスクリプトを実行できるようにします。サーバに埋め込まれている永続的なインタプリタにより、外部インタプリタの起動のオーバーヘッド、およびPerlの起動時間のペナルティを回避できます。
PHPは、サーバ側クロスプラットフォームのHTML埋込みスクリプト言語です。
mod_pythonは、Apache HTTPサーバへのPythonの埋込みができるようにし、Webベースのアプリケーションの設計で、さらに柔軟性を持たせ、パフォーマンスを向上させます。
上級ユーザは、カスタムのモジュールを記述して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モジュールに適しています。インストール場所は/usr/lib/apache2-workerです。
cd /path/to/module/source; apxs2 -cia mod_foo.cコマンド(-cはモジュールをコンパイル、-iはモジュールをインストール、-aはモジュールを有効化する)を使用して、ソースコードからモジュールをインストールし、有効化します。apxs2のその他のオプションについては、apxs2(1) manページを参照してください。