目次

Apache2.4 httpd.confの編集

Version 2.4.41

y2sunlight 2019-10-07

Apacheに戻る

関連記事

Appendix


概要

以下では、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 で出現するディレクティブの順に挙げます。


Global Enviroment

サーバのインストールディレクトリ
ServerRoot "D:/usr/xampp7.2.22/apache"

ServerRoot ディレクティブは、 サーバのインストールディレクトリを設定します。通常、この中にはconf/ や logs/ といったサブディレクトリが存在します。httpd.conf に記述する他の設定ファイルの相対パスは、このディレクトリからになります。

httpのリスニング
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版の基本設定」を参照して下さい。


Main server configuretion

管理者メールアドレス
ServerAdmin postmaster@localhost

ServerAdmin ディレクティブには、サーバエラー発生時にブラウザに表示するエラーメッセージ中に記述する電子メールアドレスを設定します。

サーバのIPアドレスとポート番号
ServerName localhost:80

ServerName ディレクティブには、サーバが自分自身を示すホスト名とポートを設定します。 これは、リダイレクトする URL を生成する際に利用されます。公開用途でApacheを用いる場合は、DNS名を用いて以下のように記述しますが、本編では上のようにローカルホストを設定します。

ServerName y2sunlight.com:80

ServerNameが指定されていないときは、サーバはIPアドレスから逆引きを行なうことでホスト名を解決します。また、ServerName にポートが指定されていないときは、 サーバはリクエストが来ている ポートを使います。逆引きの手間を省く為にもServerName を使ってホスト名とポートを明示的に指定することをお薦めします。

デフォルトのアクセス制御
httpd.conf
<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 には最後のスラッシュを指定してはなりません。

ドキュメントルートのアクセス制御
httpd.conf
<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 すべてのアクセスを許可
インデックスファイル
httpd.conf
<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プログラムでよく見かける多くの拡張子が追加されています。

特別なファイルの保護
httpd.conf
<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)も定義してあるので、必要に応じて形式を変更します。


Supplemental configuretion

このセクションでは、Include ディレクティブを使って、機能毎の設定ファイル(*.conf)を conf/extra ディレクトリー内からインクルードし、サーバーに機能を追加したり、デフォルト設定を変更したりしています。

例えば、以下はバーチャルホスティングに関するインクルードの例です。

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

XAMPP7.2でインストールしたApacheでは、conf/extra ディレクトリー内に、バーチャルホスティング、ユーザホームディレクトリ、プロキシ、SSL及びWebDAVなど14種類の機能についての追加設定ファイルが存在しています。