以下では、httpd.conf について説明します。XAMPPのhttpd.conf は以下に配置されています。
{XAMPP Install folder}\apache\conf\httpd.conf
本章の内容は本編の目的である「テスト用のローカルWebサーバの構築」です。従って、設定内容自体は公開用のWebサーバには当てはまりませんが、Apacheの設定方法に関してはある程度の参考になると思います。
XAMPP7.2でインストールした直後の httpd.conf はファイル全体で(インクルードファイルも含めて) 約 1,800行あります。そのうち、行頭に # (シャープ記号)の付いた行はコメント行です。実際には、# が行頭にない行が有効な設定になります。httpd.conf は、次の3つのセクションから構成されています。
(Section 1)Global Enviroment | Webサーバ全体の動作環境に関する設定 |
(Section 2)Main server configuretion | メインサーバに関する設定 |
(Section 3)Supplemental configuretion | 追加機能に関する設定 |
このセクション分けは便宜的なもので、設定上の特別な意味は持ちません。上で使われている「メインサーバ」と言う用語は、バーチャルホスティングによって扱われる仮想サーバに対して本来のWebサーバの事を指す言葉として使われています。仮想サーバの設置は Supplemental configuretion で行われています。
以下では、主要な設定内容のみを、httpd.conf で出現するディレクティブの順に挙げます。
ServerRoot "D:/usr/xampp7.2.22/apache"
ServerRoot ディレクティブは、 サーバのインストールディレクトリを設定します。通常、この中にはconf/ や logs/ といったサブディレクトリが存在します。httpd.conf に記述する他の設定ファイルの相対パスは、このディレクトリからになります。
Listen 80
Listen ディレクティブは Apache がリスニングするIP アドレスとポート番号を指定します。IPアドレスの指定がない場合、全インターフェースのリクエストに応答します。 Listen ディレクティブは必須のディレクティブで、設定ファイルに指定がなければ、サーバは起動に失敗します。
構文: Listen [IP-address:]portnumber
例:ポートを8080に変更する場合
Listen 8080
複数のIPアドレスやポートに対してリスニングする事もできます。例えば、80番と8080番のポートをリスニングするには以下のようにします。
Listen 80 Listen 8080
# Example: # LoadModule foo_module modules/mod_foo.so # LoadModule access_compat_module modules/mod_access_compat.so ... LoadModule status_module modules/mod_status.so
LoadModule ディレクティブはモジュールを追加してサーバの機能を拡張します。初期にロードされているモジュールの一覧は前章の「apache2.4 Windows版の基本設定」を参照して下さい。
ServerAdmin postmaster@localhost
ServerAdmin ディレクティブには、サーバエラー発生時にブラウザに表示するエラーメッセージ中に記述する電子メールアドレスを設定します。
ServerName localhost:80
ServerName ディレクティブには、サーバが自分自身を示すホスト名とポートを設定します。 これは、リダイレクトする URL を生成する際に利用されます。公開用途でApacheを用いる場合は、DNS名を用いて以下のように記述しますが、本編では上のようにローカルホストを設定します。
ServerName y2sunlight.com:80
ServerNameが指定されていないときは、サーバはIPアドレスから逆引きを行なうことでホスト名を解決します。また、ServerName にポートが指定されていないときは、 サーバはリクエストが来ている ポートを使います。逆引きの手間を省く為にもServerName を使ってホスト名とポートを明示的に指定することをお薦めします。
<Directory> AllowOverride none Require all denied </Directory>
httpd.conf のこの辺からいよいよメインサーバに関するアクセス制御の中核に入っていきます。<Directory />ブロックはApacheインストール時に初期設定されます。この設定は全ての物理ディレクトリに対するアクセス制御(即ちデフォルトのアクセス制御)を表しています。 初期設定では
AllowOverride none | アクセス制御ファイル(.htaccess)によるアクセス制御を全て禁止 |
Require all denied | すべてのアクセスを拒否 |
になっています。これは、一旦、全てのホストからのアクセスを拒否しておいて、後で個別のドキュメントディレクトリに対して個別にアクセスを許可していきます。AllowOverride、Require の各ディレクティブについては「アクセス制御ディレクティブ 」をご覧下さい。また、より詳しく知りたい方は「Apache HTTP サーバ バージョン 2.4 ドキュメント( http://httpd.apache.org/docs-2.4/ )」を参照して下さい。
DocumentRoot "D:/usr/xampp7.2.22/htdocs"
DocumentRootディレクティブには、ドキュメントルートを設定します。Apacheは指定されたURLパスがAlias またはScriptAlias ディレクティブにマッチしない場合には、ここで設定した物理パスに、リクエストされたURLパスを付加して物理パスを生成します。DocumentRoot には最後のスラッシュを指定してはなりません。
<Directory "D:/usr/xampp7.2.22/htdocs"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory>
ドキュメントルート下のアクセス制御を以下のように設定してます。
Options Indexes | ディレクトリ中のファイルリストをクライアントに返す |
Options FollowSymLinks | ディレクトリ中のシンボリックリンクを有効 |
Options Includes | SSI を有効にします |
Options ExecCGI | CGI スクリプトの実行を許可 |
AllowOverride none | アクセス制御ファイル(.htaccess)によるアクセス制御を全て許可 |
Require all denied | すべてのアクセスを許可 |
<IfModule dir_module> DirectoryIndex index.php index.pl index.cgi index.asp index.shtml index.html index.htm \ default.php default.pl default.cgi default.asp default.shtml default.html default.htm \ home.php home.pl home.cgi home.asp home.shtml home.html home.htm </IfModule>
IfModule ディレクティブでは、モジュールがロードされているか否かによって含まれる設定をガードします。即ち、dir_module がロードされていない場合はDirectoryIndex ディレクティブは実行されません。
DirectoryIndex ディレクティブでは、クライアントが「/」 で終わるURLパスを要求(ディレクトリインデックス要求)した 場合に探すファイル名を設定します。複数のファイル名をスペースで区切って指定する事ができます。複数指定されている場合は、前に記述したものが優先されます。ここで指定したファイルが見つからず、Option Indexes が設定されている場合、Apacheはディレクトリリストを生成します。XAMPPでインストールしたApacheには上のようにWebプログラムでよく見かける多くの拡張子が追加されています。
<Files ".ht*"> Require all denied </Files>
アクセス制御ファイルの名前は、既定では.htaccessです( AccessFileNameディレクティブによって変更できます )。このようにApacheでは .ht で始まるファイルを特別視する習慣があります。従って、このような特別なファイルを保護するために、<Files>ブロックを作り全てのホストからのアクセスを拒否します。
ErrorLog logs/error.log LogLevel warn
ErrorLogでエラーログファイル名を、LogLevelでエラーログのレベル(重要度)を指定します。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio LogFormat "%h %l %u %t \"%r\" %>s %b" common CustomLog "logs/access.log" combined
CustomLog ディレクティブはクライアントのHTTPリクエストのログ収集を指定します。上の設定では、CustomLog で combined を指定しているので、実際に有効なのは以下の部分です。
# ログ形式を指定し、形式に名前(combined)を付けます LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined # 指定のログ形式(combined)でログファイル(logs/access.log)を作ります CustomLog "logs/access.log" combined
combined以外の形式(common/combinedio)も定義してあるので、必要に応じて形式を変更します。
このセクションでは、Include ディレクティブを使って、機能毎の設定ファイル(*.conf)を conf/extra ディレクトリー内からインクルードし、サーバーに機能を追加したり、デフォルト設定を変更したりしています。
例えば、以下はバーチャルホスティングに関するインクルードの例です。
# Virtual hosts Include conf/extra/httpd-vhosts.conf
XAMPP7.2でインストールしたApacheでは、conf/extra ディレクトリー内に、バーチャルホスティング、ユーザホームディレクトリ、プロキシ、SSL及びWebDAVなど14種類の機能についての追加設定ファイルが存在しています。