10.2. Apache HTTP サーバー 1.3 の設定ファイルの移行

Apache HTTP サーバーがすでにインストールされていた Red Hat Linux 7.3又はそれ以前のバージョンから アップグレードする場合、新しいApache HTTP サーバー2.0 パッケージの標準設定ファイルは /etc/httpd/conf/httpd.conf.rpmnewとしてインストールされて おり、オリジナルのバージョン1.3 httpd.confはそのまま残って います。勿論、これはユーザー任意の計画で、新しい設定ファイルを使用して、古い 設定をそれに移行させるか、又は、既存のファイルをベースとして使用して、必要な 分を編集するかを決定することになります。ただし、ファイルの幾らかの部分では他の 部分よりも多く変更されており、全般的に両方を混ぜたアプローチが適切でしょう。 バージョン1.3とバージョン2.0の標準の設定ファイルは両方とも、3つのセクションに 判れています。このガイドの目的はどのようなコースが最適であるかを提案する ことにあります。

/etc/httpd/conf/httpd.confが、デフォルトRed Hat Linuxバージョンの 変更されたバージョンであり、オリジナルのコピーが入手できる場合は、以下の例の ようにdiffコマンドを執行するのが最も簡単でしょう:

diff -u httpd.conf.orig httpd.conf | less

このコマンドは、実行された変更をすべて拾い出します。もし、オリジナルファイルの コピーがない場合は、rpm2cpiocpioコマンドを 使用してそれをRPMパッケージから取り出すことも出来ます。以下のようにします:

	  rpm2cpio apache-<version-number>.i386.rpm | cpio -i --make

上記のコマンドでは、<version-number>を、apache パッケージ用のバージョン番号で入れ換えます。

最後に、Apache HTTP サーバーが設定エラーをチェックする為のテストモードを持っていることを覚えていると 便利です。これにアクセスするには、次のようなコマンドを入力します:

apachectl configtest

10.2.1. グローバル環境の設定

設定ファイルのグローバル環境のセクションには、処理できる同時要求の数量や 各種ファイルの場所など Apache HTTP サーバーの全体的な運営に影響するディレクティブが 含まれています。このセクションは、他の部分に比べて大量の変更がありますので Apache HTTP サーバー 2.0設定ファイルのこのセクションをベースとして、そして古い設定を ここに移行することが推奨されます。

10.2.1.1. バインドするインターフェイスとポートの選択

BindAddressPortのディレクティブは もう存在しません。それらの機能は現在、より柔軟なListen ディレクティブにより提供されます。

Port 80が、1.3バージョンの設定ファイルでセットされていた 場合、2.0設定ファイルではそれをListen 80に変更します。 Port80以外の値がセットしてあった 場合、、そのポート番号をServerNameディレクティブの内容に 付加します。

例として、以下に Apache HTTP サーバー 1.3 ディレクティブのサンプルを示します:

Port 123
ServerName www.example.com

この設定を Apache HTTP サーバー 2.0に移行するには、次の構成を使用します:

Listen 123
ServerName www.example.com:123 

この課題についての情報は、以下のApache Software Foundationのサイトにあるドキュメントでお読み下さい:

10.2.1.2. サーバープールサイズの規定

Apache HTTP サーバー 2.0では、要求を受理し、それを処理する為に子プロセスを 送る責任は、MPM(Multi-Processing Modules)と 呼ばれるモジュールのグループへと分離されていました。他のモジュール とは異なり、MPMグループからはモジュール1つだけがApache HTTP サーバーによってロード されます。バージョン2.0には3つのMPM モジュールが同梱されています: preforkworker、及び perchildです。

オリジナルの Apache HTTP サーバー 1.3 の動作は、preforkMPMの中に移動され、 Red Hat Linux上では、現在prefork MPMだけが利用できます。但し、 他のMPMも後日、利用できるようになるでしょう。

prefork MPMはApache HTTP サーバー 1.3と同じディレクティブを受け付け ますので、以下のディレクティブは直接移行が出来ます:

  • StartServers

  • MinSpareServers

  • MaxSpareServers

  • MaxClients

  • MaxRequestsPerChild

この課題に関する情報はApache Software Foundationのサイトで次のドキュメントでお読み下さい:

10.2.1.3. DSO (Dynamic Shared Object)のサポート

ここでは多くの変更が必要です。そしてバージョン2.0に合わせるために Apache HTTP サーバー 1.3の設定ファイルを修正(変更をバージョン2.0設定に移行する こととは別)しようとしているユーザーには、標準のRed Hat Linux Apache HTTP サーバー2.0 設定ファイルからこのセクションをコピーすることが推奨されます。

標準のApache HTTP サーバー 2.0設定からセクションをコピーしたくない人は 以下の点を注意して下さい:

  • AddModuleClearModuleListの ディレクティブはもう存在しません。これらのディレクティブはモジュールが 正しい順序で有効になることを確証すのに使用されていました。Apache HTTP サーバー 2.0 APIに より、モジュールはその順序を指定することが出来ますので、以前のディレクティブの 必要性がなくなりました。

  • LoadModule 行の順序はもう関係ありません。

  • 多くのモジュールに対し、追加、削除、名前変更、分離、合併など が実行されています。

  • 自身のRPM(mod_sslphpmod_perl、その他)にパッケージされているモジュール用 LoadModuleの行はもう必要ありません。それらは現在、 /etc/httpd/conf.d/ディレクトリ内の該当する ファイルの中に存在します。

  • 各種HAVE_XXXの定義はもう定義付けされません。

誓要項目重要
 

オリジナルファイルを編集している場合、httpd.confには 以下のディレクティブが含まれることが最大の重要点であることに注意して 下さい:

Include conf.d/*.conf

このディレクティブが欠如すると、それ自身のRPM内にパッケージしてあるすべてのモジュール (mod_perlphpmod_sslなど)が 機能しなくなります。

10.2.1.4. 他のグローバル環境の変更

以下のディレクティブはApache HTTP サーバー 2.0設定から削除されました:

  • ServerType — Apache HTTP サーバー はServerType standaloneとしてのみ 実行できますので、このディレクティブは不要物となります。

  • AccessConfig及び ResourceConfig — これらのディレクティブは、Includeディレクティブの 機能のミラーである為、削除されました。もし、AccessConfigResourceConfigのディレクティブがセットされている場合は、 それらをIncludeディレクティブで入れ換えてください。

    ファイルが、古いディレクティブにより示されている順序で確実に読み込まれるように するには、Includeディレクティブがhttpd.confの 末尾に位置していて、さらにResourceConfigに相当するものと、その後に AccessConfigに相当するものが添付されている必要があります。 デフォルトの値を使用している場合、それらを明確にconf/srm.conf ファイルとconf/access.confファイルと指定して含めます。

10.2.2. メインサーバーの設定

設定ファイルのメインサーバー設定セクションはメインサーバーをセットし、 <VirtualHost>のコンテナで定義した仮想ホストで 処理されない全ての要求に応答します。ここでの値は<VirtualHost>の コンテナに定義されるデフォルトを提供するものです。

このセクションのディレクティブは、Apache HTTP サーバー1.3 と2.0のバージョン間で少ししか 変更されていません。メインサーバーの設定が大幅にカスタマイズされている場合、 既存の設定をApache HTTP サーバー 2.0に合うように編集したほうが簡単である可能性があります。 軽いカスタマイズしかしていないユーザーはそれらの変更をデフォルトの2.0設定へ 移動すべきです。

10.2.2.1. UserDir マッピング

UserDirディレクティブは、http://example.com/~bob/などの URLを有効にして、/home/bob/public_htmlなどのユーザーbob のホームディレクトリ内のサブディレクトリへマップするために使用されます。この機能の副作用として 侵入者にシステム上にあるユーザー名の存在を判定をさせてしまうことがあります。この理由のため、 Apache HTTP サーバー 2.0のデフォルト設定では、このディレクティブが無効になっています。

UserDirマッピングを有効にするには、 httpd.confから以下の状態のディレクティブを変更します:

UserDir disable

次のように変えます:

UserDir public_html

この課題についての情報は、Apache Software Foundationのサイト内にある次のドキュメントを参考にして下さい。 http://httpd.apache.org/docs-2.0/mod/mod_userdir.html#userdir.

10.2.2.2. ロギング

以下のロギングのディレクティブは削除されています:

  • AgentLog

  • RefererLog

  • RefererIgnore

しかし、エージェントログと参照ログはまだ、CustomLogディレクティブと LogFormatディレクティブで利用できます。

この課題についての情報はApache Software Foundationのサイトで、次のドキュメントをお読み下さい:

10.2.2.3. ディレクトリの索引

無用になったFancyIndexingディレクティブは、すでに削除されて います。同じ機能をIndexOptionsディレクティブ内の FancyIndexing optionで利用出来ます。

IndexOptionsディレクティブへの新しいVersionSortオプションは、 バージョン番号を含んでいるファイルをより自然に分類するようになります。例えば、 httpd-2.0.6.tarはディレクトリ索引のページで httpd-2.0.36.tarの前に来ます。

ReadmeNameHeaderNameのデフォルトの ディレクティブはREADMEHEADERから README.htmlHEADER.htmlへ変更されて います。

この課題についての情報は Apache Software Foundationの サイトで次のドキュメントから入手してください:

10.2.2.4. コンテンツ交渉

CacheNegotiatedDocsディレクティブは、改訂で 引数にon 又は offを使うように なりました。CacheNegotiatedDocsの既存のインスタンスは CacheNegotiatedDocs onで入れ換える必要があります。

この課題に関する情報は Apache Software Foundationのサイトで以下のドキュメントから入手して下さい:

10.2.2.5. エラードキュメント

ErrorDocumentディレクティブで hard-codedメッセージを 使用するには、メッセージはApache HTTP サーバー 1.3で 要求されていた2重引用符を前に付ける のではなく、前後の2重引用符["]で囲まれなければなりません。

ErrorDocumentの設定をApache HTTP サーバー2.0に移行するには 以下の構造を使用します:

ErrorDocument 404 "The document was not found"

上記のErrorDocumentディエクティブに付いて来る 2重引用符に注意して下さい。

この課題に関する情報については Apache Software Foundationのサイトで次のドキュメントから入手することが出来ます:

10.2.3. 仮想ホスト設定

<VirtualHost>コンテナの内容のすべては、項10.2.2に 示してあるようにメインサーバーと同様な方法で移行すべきです。

誓要項目重要
 

SSL/TLS仮想ホスト設定は、メインサーバー設定ファイルから /etc/httpd/conf.d/ssl.confへ移動された ことに注意して下さい。

この課題についての情報はRed Hat Linux カスタマイズガイド内のApache HTTPセキュアサーバーの設定という章、及び以下のサイトにあるオンライン ドキュメントで御覧下さい:

10.2.4. モジュールと Apache HTTP サーバー 2.0

Apache HTTP サーバー 2.0では、モジュールシステムはモジュールが一緒に連結されるように、又は 新しい、興味深い方法で結合されるように変更されました。CGI (Common Gateway Interface)スクリプトは、例として、サーバー 構文解析付きHTMLドキュメントを生成でき、これはmod_includeで プロセスされます。これにより、特定の目的を達成するためのモジュールを組み合わせる 方法に膨大な可能性が出て来ます。

この機能の仕組みは、各要求が正確に1つのハンドラモジュールにより サービスされて、0又はそれ以上のフィルタモジュールが続くように なっています。

Apache HTTP サーバー 1.3の例として、PHPスクリプトはすべて、そのPHPモジュールによって処理されて います。Apache HTTP サーバー 2.0では、そのような供給はコアモジュールによって処理 されます。—これは固定ファイルをサービスします。— その後、PHPモジュールによって フィルタされます。

厳密には、この使用法及びApache HTTP サーバー 2.0のすべての他の新機能については、 このマニュアルの担当範囲を越えるものです。ただ、 PATH_INFOディレクティブが、フィルタとして実装されている、 モジュールにより処理されるドキュメントで使用される場合は、変更は分岐されます。 これは、それぞれ本来のパス名の後にパス情報を含んでいるためです。 初期段階で要求を処理するコアモジュールは、デフォルトでPATH_INFOを 理解できず、その情報を持つ要求に対し404 Not Foundエラーを 送り返します。代替としてAcceptPathInfoディレクティブを使用して、 コアモジュールがPATH_INFOの要求を受け付けるように強制します。

以下に、このディレクティブの例を示します:

AcceptPathInfo on

この課題の追加情報は、Apache Software Foundationのサイトの以下のドキュメント内で御覧になれます:

10.2.4.1. mod_sslモジュール

mod_sslの設定はhttpd.confから /etc/httpd/conf.d/ssl.confファイルへ移動されました。 このファイルをロードするため、そしてmod_sslが機能する 為には、項10.2.1.3で表示されているように、 Include conf.d/*.confステートメントがhttpd.confに 含まれる必要があります。

SSL仮想ホストのServerNameは明確にそのポート番号を 指定する必要があります。

例えば、次のApache HTTP サーバー 1.3 ディレクティブの例のようになります:

<VirtualHost _default_:443>
    # General setup for the virtual host
    ServerName ssl.example.name
    ...
</VirtualHost>

この設定をApache HTTP サーバー 2.0に移行するには、次の構成を使用します:

<VirtualHost _default_:443>
    # General setup for the virtual host
    ServerName ssl.host.name:443
    ...
</VirtualHost>

この課題についての情報は、 Apache Software Foundationのサイトにある以下のドキュメントでお読み下さい:

10.2.4.2. mod_proxyモジュール

プロキシーアクセス制御ステートメントは、今回の設定では、 <Directory proxy:>ではなく、 <Proxy>ブロック内にあります。

古いmod_proxyのキャシング機能は、次の 3つのモジュールに分割されました:

  • mod_cache

  • mod_disk_cache

  • mod_file_cache

これらのモジュールは、全般的にmod_proxyモジュールの 古いバージョンと同じ、又は似たようなディレクティブを使用します。

この課題に関する追加情報は、 Apache Software Foundationのサイトの中にある以下のドキュメントでお読みください:

10.2.4.3. mod_includeモジュール

mod_includeモジュールは、今回のリリースで フィルタとして実装されており、このため、異なる方法で有効に なります。フィルタに関する情報は項10.2.4で 確認して下さい。

例えば、Apache HTTP サーバー 1.3ディレクティブのサンプルは以下のようになります:

AddType text/html .shtml
AddHandler server-parsed .shtml

この設定をApache HTTP サーバー 2.0に移行するには、次の構成を使用します:

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

以前と同様に、Options +Includesディレクティブは、この改訂でも <Directory>コンテナ、あるいは.htaccess ファイルによって必要とされていることに注意して下さい。

この課題に関する追加情報は、Apache Software Foundationのサイトにある以下のドキュメント内で読むことが出来ます:

10.2.4.4. mod_auth_dbmモジュールと mod_auth_dbモジュール

Apache HTTP サーバー 1.3 は、Berkeley DatabasesとDBMデータベースをそれぞれ使用した mod_auth_dbmod_auth_dbmと言う 2つの認証モジュールをサポートしていました。これらのモジュールは今、 Apache HTTP サーバー2.0では、mod_auth_dbmとして1つのモジュールに 結合されています。 これは数種の異なるデータベース形式にアクセスできます。 mod_auth_dbから移行するには、AuthDBUserFileAuthDBGroupFilemod_auth_dbmの同種である AuthDBMUserFileAuthDBMGroupFileで入れ換える ことで、設定ファイルを調節する必要があります。また、AuthDBMType DB ディレクティブを付け加えて使用中のデータベースファイルのタイプを表示する必要があります。

次の例では、Apache HTTP サーバー 1.3用のmod_auth_db設定の サンプルを示しています:

<Location /private/>
  AuthType Basic
  AuthName "My Private Files"
  AuthDBUserFile /var/www/authdb
  require valid-user
</Location>

この設定をApache HTTP サーバーのバージョン2.0に移行するには、次の構成を使用します:

<Location /private/>
  AuthType Basic
  AuthName "My Private Files"
  AuthDBMUserFile /var/www/authdb
  AuthDBMType DB
  require valid-user
</Location>

AuthDBMUserFileディレクティブは.htaccessファイルでも 使用することができることに注意して下さい。

ユーザー名とパスワードデータベースの処理に使用されるdbmmanage Perl スクリプトは、Apache HTTP サーバー 2.0内では、htdbmに入れ替わっています。 htdbmプログラムは同様の機能を持ち、mod_auth_dbmの 様に、各種のデータベース形式を運営することが出来ます。-Tオプションは コマンドライン上で使用するフォーマットを指定することが出来ます。

表10-1は、dbmmanageを使用して DBM-formatデータベースからhtdbmフォーマットへ移行する 方法を示しています。

操作dbmmanage コマンド (1.3)対応する htdbm コマンド (2.0)
データベースにユーザーを追加 (設定したパスワード使用)dbmmanage authdb add username passwordhtdbm -b -TDB authdb username password
データベースにユーザーを追加 (パスワードを要求)dbmmanage authdb adduser usernamehtdbm -TDB authdb username
データベースからユーザーを削除dbmmanage authdb delete usernamehtdbm -x -TDB authdb username
データベースにユーザーをリストするdbmmanage authdb viewhtdbm -l -TDB authdb
パスワードを確認dbmmanage authdb check usernamehtdbm -v -TDB authdb username

表 10-1. dbmmanageからhtdbmへの移行

-mオプションと -sオプションは dbmmanagehtdbmの両方で機能し、 ハッシュパスワード用の MD5 又は SHA1アルゴリズムの使用をそれぞれ有効にします。

htdbmで新規のデータベースを作成する場合は、 -cオプションを使用しなければなりません。

この課題についての追加情報は、 Apache Software Foundationのサイトにある以下のドキュメントで御覧下さい:

10.2.4.5. mod_perlモジュール

mod_perlの設定は、httpd.confから /etc/httpd/conf.d/perl.confファイルへ移動されました。 このファイルをロードするには、そしてmod_perlが機能する ようにするには、Include conf.d/*.confステートメントが 項10.2.1.3に示してあるようにhttpd.conf内に 含まれる必要があります。

httpd.conf内でのApache::の 存在は、ModPerl::に入れ換えなければなりません。 さらに、ハンドラが登録される方法は変更されました。

以下に Apache HTTP サーバー 1.3 mod_perl設定のサンプルを示します:

<Directory /var/www/perl>
    SetHandler perl-script
    PerlHandler Apache::Registry
    Options +ExecCGI
</Directory>

これはApache HTTP サーバー 2.0用のmod_perlと同等のものです:

<Directory /var/www/perl>
    SetHandler perl-script
    PerlModule ModPerl::Registry
    PerlHandler ModPerl::Registry::handler
    Options +ExecCGI
</Directory>

mod_perl 1.x 用の殆どのモジュールは、修正なしで mod_perl 2.xと一緒に機能するはずです。 XS モジュールはリコンパイルが必要で、少々、Makefileの修正が 必要になるかも知れません。

10.2.4.6. mod_pythonモジュール

mod_pythonの設定はhttpd.confから /etc/httpd/conf.d/python.confファイルへ移動しました。 このファイルをロードする為に、またmod_pythonが機能する 為には、Include conf.d/*.confステートメントが項10.2.1.3に示してあるように、httpd.confに 含まれる必要があります。

10.2.4.7. PHP

PHPの設定ファイルは、httpd.confから /etc/httpd/conf.d/php.confへ移動されました。 このファイルをロードするためには、項10.2.1.3に 示してあるように、Include conf.d/*.confステートメントが httpd.confの中になければなりません。

PHP は、フィルタとして実装されています。そのため、異なる 方法で有効にする必要があります。フィルタに関する情報は 項10.2.4 で御覧下さい。

Apache HTTP サーバー 1.3では、 PHPは 以下のディレクティブを使用して 実装されていました:

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Apache HTTP サーバー 2.0では、 その代わりに次のようなディレクティブを使用します:

<Files *.php>
    SetOutputFilter PHP
    SetInputFilter PHP
</Files>

PHP 4.2.0 とそれ移行のバージョンでは、グローバルスコープで利用できた 定義済変数のデフォルトセットは変更されています。個別の入力とサーバーの 変数はデフォルトでは、もうグローバルスコープの中に直接配置はされません。 この変更が、スクリプト分裂の原因になるかも知れません。register_globalsの 設定で/etc/php.iniファイル内をOnにして以前の 動作に戻して下さい。

この課題に関する追加情報は、以下のURLでグローバルスコープの変更について参照して下さい: