|
2005-05-14
httpd.confの編集 †以下では、httpd.conf について説明しますが、その内容は本編の目的である「テスト用のローカルWebサーバの構築」です。従って、設定内容自体は公開用のWebサーバには当てはまりませんが、Apacheの設定方法に関してはある程度の参考になると思います。 インストール直後のhttpd.conf は全体で約 1,000行あります。そのうち、行頭に # (シャープ記号)の付いた行はコメント行です。実際には、# が行頭にない行が有効な設定になります。httpd.conf は、次の3つのセクションから構成されています。尚、Apacheでは、バーチャルホスティングによって扱われる仮想サーバに対して本来のWebサーバの事をメインサーバと呼んでいます。
以下では、本編の目的である「テスト用のローカルWebサーバの構築」を行うための設定内容を、httpd.conf で出現するディレクティブの順に挙げます。尚、ここでは、インストール後に変更したもの及び説明のために特に重要と思われる主要な設定内容のみを挙げています。尚、仮想サーバに関する設定はありません。 Global Enviroment (Webサーバ全体の動作環境に関する設定) †サーバのインストールディレクトリ †ServerRoot "C:/usr/Apache2" ServerRoot ディレクティブは、 サーバのインストールディレクトリを設定します。通常、この中にはconf/ や logs/ といったサブディレクトリが存在します。httpd.conf に記述する他の設定ファイルの相対パスは、このディレクトリからになります。 Keep-Alive †KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 KeepAliveディレクティブはHTTP の持続的な接続(Keep-Alive)を有効(On)にします。無効にする場合はOffを指定します。MaxKeepAliveRequestsはKeep-Alive有効時の一回の接続で受付け可能なリクエストの数を指定します。この値を0 にすると、受付けリクエストは無制限になります。 KeepAliveTimeoutはKeep-Alive 有効時に次のリクエストが来るまでサーバが待つ時間(秒)を指定します。 httpのリスニング †Listen 80 Listen ディレクティブは Apache がリスニングするIP アドレスとポート番号を指定します。
IPアドレスの指定がない場合、全インターフェースのリクエストに応答します。 Listen ディレクティブは必須のディレクティブで、設定ファイルに指定がなければ、サーバは起動に失敗します。本編でのApacheのインストールの説明で、「後でhttpd.confを編集すれば、Apacheのリスニングポートを8080などに変更できます。」と書きましたが、これをするには、
と変更し、後で説明するServerNameディレクティブを変更して下さい。また、複数のIPアドレスやポートに対してリスニングする事もできます。例えば、80番と8080番のポートをリスニングするには以下のようにします。
Main server configuretion (メインサーバに関する設定) †管理者メールアドレス †ServerAdmin webmaster@water-sunlight.com ServerAdminディレクティブには、サーバエラー発生時にブラウザに表示するエラーメッセージ中に記述する電子メールアドレスを設定します。 サーバのIPアドレスとポート番号 †ServerName localhost:80 ServerName ディレクティブには、サーバが自分自身を示すホスト名とポートを設定します。 これは、リダイレクトする URL を生成する際に利用されます。公開用途でApacheを用いる場合は、DNS名を用いて
のように記述しますが、本編では上のようにローカルホストを設定します。 ServerNameが指定されていないときは、 サーバは IP アドレスから逆引きを行なうことでホスト名を解決します。また、ServerName にポートが指定されていないときは、 サーバはリクエストが来ている ポートを使います。逆引きの手間を省く為にもServerName を使ってホスト名とポートを明示的に指定する方が信頼性が高まります。 ドキュメントルート †DocumentRoot "D:/WWWRoot" DocumentRootディレクティブには、ドキュメントルートを設定します。ApacheはURLパスがAliasまたはScriptAliasディレクティブにマッチしない場合には、ここで設定した物理パスに、リクエストされたURLパスを付加して物理パスを生成します。DocumentRoot には最後のスラッシュを指定してはなりません。Apache Windows版のデフォルトは、
です。 デフォルトのアクセス制御 †<Directory /> Options None AllowOverride None Order Allow,Deny Deny from All </Directory> httpd.conf のこの辺からいよいよメインサーバに関するアクセス制御の中核に入っていきます。<Directory />ブロックはApacheインストール時に初期設定されます。この設定は全ての物理ディレクトリに対するアクセス制御(即ちデフォルトのアクセス制御)を表しています。
になっています。Optionsの設定をNoneに変更し全てのアクセス制御オプションを無効にしています。また、このままでは「Order Deny,Allow(全てのホストからのアクセス許可)」がデフォルトとして適用されてしまいます。ローカルサーバと言えども、セキュリティ面を考え以下のディレクティブを追加します。
このように、一旦、全てのホストからのアクセスを拒否しておいて、後で個別のドキュメントディレクトリに対して個別にアクセスを許可していきます。尚、最後の Deny from All は(Order Allow,Denyはホストからのアクセスをデフォルトで拒否するので)本来不要ですが、明示的に記述しました。 Options, AllowOverride, Order, Allow, Denyの各ディレクティブの詳細は「付録 アクセス制御ディレクティブ」を参照して下さい。 ドキュメントルートのアクセス制御 †<Directory "D:/WWWRoot"> Options All AllowOverride All Order Allow,Deny Allow from localhost Allow from 192.168.1.0/24 </Directory> DocumentRootで設定したドキュメントルートに対するアクセス制御を設定します。まず、
として、全てのアクセス制御オプションを許可します。次に、
として、ローカルサーバの使用を制限します。この設定は、公開用サーバなどの設定とはまったく異なります。テスト用のローカルサーバを設定しているので、「特定のホストからしかアクセスできないが、アクセスできるホストには全てのアクセス制御オプションを与える」を基本的な考え方としています。 Options, AllowOverride, Order, Allow, Denyの各ディレクティブの詳細は「付録 アクセス制御ディレクティブ」を参照して下さい。 ファイアウォール
ユーザディレクトリ †UserDir "D:/Apatch Users/*" UserDir disabled UserDir enabled user1 user2 <Directory "D:/Apatch Users/*"> Options All AllowOverride All Order Allow,Deny Allow from localhost Allow from 192.168.1.0/24 </Directory> UserDirでユーザディレクトリを既定の場所(C:/Documents and Settings/user )からにD:/Apatch Users/user に変更し、特定のユーザ(sunlightとtestuser)にのユーザディレクトリの使用を許可します。初期設定では、
になっています。この場合のユーザディレクトリは"C:/Documents and Settings/user/My Documents/My Website"になります。UserDirでユーザディレクトリを設定してもクライアントからはアクセスできません。なぜなら、本編では、デフォルトのアクセス制御(<Directory />)で全てのアクセスを拒否しているからです。従ってユーザディレクトリに対してもアクセスを許可する必要はあります。ここでは、ドキュメントルートと同じ設定をユーザディレクトリに対しても行っています。(テスト用のローカルサーバなのでユーザディレクトリを使用する機会はほとんどないと思いますが) インデックスファイル †DirectoryIndex index.html index.html.var index.cgi index.php DirectoryIndex ディレクティブでは、クライアントが「/」 で終わるURLパスを要求(ディレクトリインデックス要求)した 場合に探すファイル名を設定します。複数のファイル名をスペースで区切って指定する事ができます。複数指定されている場合は、前に記述したものが優先されます。ここで指定したファイルが見つからず、Option Indexes が設定されている場合、Apacheはディレクトリリストを生成します。 ここでは初期の設定にindex.cgiとindex.phpを追加しました。 尚、index.html.varは、Apacheがコンテントネゴシエーションを提供するための.varファイルです。コンテントネゴシエーションとは、ブラウザにより提供されたメディアタイプ、言語、文字セットなどのネゴシエーション情報に基づいて、最適なリソースをWebサーバが選択ための機能です。 特別なファイルの保護 †AccessFileName .htaccess <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> AccessFileNameディレクティブは、アクセス制御ファイルの名前を設定します。このファイル名は既定では.htaccessです。このようにApacheでは.htで始まるファイルを特別視するのが習慣のようです。このような特別なファイルを保護するためには、<Files ~>ブロックを作り全てのホストからのアクセスを拒否します。<Files ~>ブロック内の "^\.ht" は正規表現で、「.htで始まるファイル」の意味です。正規表現についてはPerl に関する文献などを参照して下さい。 この設定はインストール時のもので変更していません。 エラーログ †ErrorLog logs/error.log LogLevel warn ErrorLogでエラーログファイル名を、LogLevelでエラーログのレベル(重要度)を指定します。Perlなどのテストではエラーログファイルを見る機会も多いと思います。この設定はインストール時のもので変更していません。 アクセスログ †LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog logs/access.log common
CustomLog ディレクティブはクライアントのHTTPリクエストのログ収集を指定します。この設定はインストール時のもので変更していません。 この設定で、実際に有効なのは以下の部分です。
common以外の形式(combined/referer/agent)も定義してあります。公開用のWebサーバなどでは、目的と必要に応じてログファイルを追加します。 CGIディレクトリ †# ScriptAlias /cgi-bin/ "C:/usr/Apache2/cgi-bin/" # <Directory "C:/usr/Apache2/cgi-bin"> # AllowOverride None # Options None # Order allow,deny # Allow from all # </Directory> ScriptAliasディレクティブはAliasと同様にDocumentRoot 外にドキュメントディレクトリをマッピングする為に使用します。Aliasディレクティブとの違いは、ApacheはScriptAliasで指定されたディレクトリ下にあるファイルをCGI プログラムとして扱い、実行を試みます。 本編では、全てのドキュメントディレクトリでCGIの実行を許可します。従って、CGI専用のディレクトリは必要なく、ScriptAliasの関するインストール時の初期設定を全てコメントアウトして無効にしています。 CGIプログラムの拡張子 †AddHandler cgi-script .cgi .pl AddHandlerディレクティブはファイル名の拡張子を特定のハンドラにマッピングします。この設定は、拡張子(cgiとpl)をCGI スクリプトとして扱うために、ハンドラcgi-script にマッピングします。また、CGIとして実行するためにはOptions ExecCGI を使用してCGIプログラムの実行を許可しなければまりません。本編のドキュメントディレクトリの設定は Options All なので、Options ExecCGI も含んでいます。 ハンドラ
|