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

Apacheソフトウェアは、モジュール形式で構築されており、一部の主要タスクを除いてはモジュールごとに処理されます。この方法で、HTTPさえもモジュールによって処理されています(http_core)。

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

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

基本モジュール

基本モジュールは、デフォルトでApacheにコンパイルされています。SUSE Linux Enterprise ServerのApacheでは、mod_so (他のモジュールのロードに必要)およびhttp_coreのみがコンパイルされています。他のモジュールは、サーバのバイナリに入れる代わりに、ランタイム時に入れるように共有オブジェクトとして利用できます。

拡張モジュール

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

外部モジュール

外部とラベルされているモジュールは、公式のApacheのディストリビューションには含まれていません。ただし、SUSE Linux Enterprise Serverはそれらのいくつかを提供しています。

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

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

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

セクション 31.1.2, インストールで説明されているデフォルトインストールを行った場合は、すべての基本モジュールと拡張モジュール、マルチプロセシングモジュール、プリフォークMPM、および外部モジュールのmod_php5mod_pythonがすでにインストールされています。

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

31.4.2 有効化と無効化

特定モジュールの有効化/無効化は、手動で行うか、YaSTを使用します。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」を参照してください。

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

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

mod_actions

特定のMIMEタイプ(application/pdfなど)、特定の拡張子を持つファイル(.rpmなど)、または特定の要求方法(GETなど)が要求された場合に、常にスクリプトを実行する方法を提供します。このモジュールは、デフォルトで有効です。

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)自動的に配信されるファイルを設定できます。ディレクトリ要求に末尾のスラッシュが含まれていない場合は、正しいURLへの自動リダイレクトも提供します。このモジュールは、デフォルトで有効です。

mod_env

CGIスクリプトやSSIページに渡す環境を制御します。環境変数を設定、設定解除したり、httpdプロセスを起動したシェルから渡すことができます。このモジュールは、デフォルトで有効です。

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_nss

Webサーバとクライアントの間のTLS 1.1およびTLS 1.2プロトコルを介した暗号化された接続を、Mozilla Network Security Servicesライブラリを使用して有効にします。詳細については、セクション 31.7, NSSをサポートするセキュアWebサーバのセットアップを参照してください。

mod_rewrite

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

mod_setenvif

クライアントから送信されたブラウザ文字列やIPアドレスなどの、クライアントからのリクエスト詳細に基づいて環境変数を設定します。このモジュールは、デフォルトで有効です。

mod_speling

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

mod_ssl

Webサーバとクライアント間の暗号化接続を有効化します。詳細については、セクション 31.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ディレクティブを設定で指定する必要があります。このモジュールは、デフォルトで有効です。

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

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

プリフォークMPM

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

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

重要: このドキュメントでのMPM

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

ワーカーMPM

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

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

警告: MPMと組み合わせてPHPモジュールを使用する

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

31.4.5 外部モジュール

ここでは、SUSE Linux Enterprise Serverに付属しているすべての外部モジュールを記載しています。

mod-apparmor

mod_php5mod_perlなどのモジュールが処理する個々のCGIスクリプトに対して、AppArmor制限を提供するために、Apacheにサポートを追加します。

  • パッケージ名:apache2-mod_apparmor
  • 詳細: “Confining Privileges with AppArmor” (↑Security Guide)
mod_mono

mod_auth_kerbにより、Kerberos認証がApache Webサーバに提供されます。

mod_mono

mod_monoを使用すると、サーバでASP.NETページを実行できます。

  • パッケージ名: apache2-mod_mono
  • 環境設定ファイル: /etc/apache2/conf.d/mod_mono.conf
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_security

mod_securityにより、さまざまな範囲の攻撃からWebアプリケーションを保護するためのファイアウォールがWebアプリケーションに提供されます。さらに、HTTPトラフィックモニタリングおよびリアルタイム分析も可能です。

  • パッケージ名: apache2-mod_security2
  • 環境設定ファイル: /etc/apache2/conf.d/mod_security2.conf
  • 詳細: /usr/share/doc/packages/apache2-mod_security2
  • マニュアル: http://modsecurity.org/documentation/

31.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モジュールに適しています。インストール場所は/usr/lib/apache2-workerです。

次のコマンドで、ソースコードからモジュールをインストールして、アクティブにします。

cd /path/to/module/source; apxs2 -cia
    mod_foo.c

ここで、-cはモジュールをコンパイルし、-iはモジュールをインストールし、-aはモジュールをアクティブにします。apxs2のその他のオプションについては、apxs2(1) manページを参照してください。