設定ファイルの確認と修正
http.confファイルに記載されているデフォルトの内容を確認し、また修正を一部行います。設定ファイルの場所は前のページで解説いたしましたが「(XAMPPインストールディレクトリ)\apache\conf\http.conf」にあります。ファイルの修正も一部行いますので心配であれば修正前のファイルをコピーしてバックアップを取っておいて下さい。
なお設定ファイルを変更した場合、新しい設定をApacheに反映させるにはApacheを再起動する必要があります。
1.ServerRoot
2.Listen
3.LoadModule
4.ServerAdmin
5.ServerName
6.DocumentRoot
7.アクセス制限
8.DirectoryIndex
9..htaccessファイル及び.htpasswdファイルへのアクセス制限
10.ErrorLog & LogLevel
「ServerRoot」はApacheがインストールされているディレクトリを表します。35行目付近を見てください。
ServerRoot "C:/xampp/apache"
私の環境では「c:\xampp\apache」となっています。XAMPPをインストールした時のディレクトリに合わせて自動的に設定がされているはずですので通常は変更する必要はありません。Apacheの各種設定の中で絶対パスではなく相対パスで記述されている場合はこのServerRootで指定したディレクトリからの相対パスとなります。
「Listen」はApacheが外部からリクエストを受け付けるポート番号を指定します。57行目付近を見てください。
Listen 80
Webサーバはポート番号80番を使用するのが一般的です。もしApacheの他にもWebサーバを起動している場合で既に80番ポートを使用している場合などは、違うポート番号を設定して下さい。
「LoadModule」は利用するモジュールを指定します。72行目付近を見てください。
LoadModule access_compat_module modules/mod_access_compat.so LoadModule actions_module modules/mod_actions.so LoadModule alias_module modules/mod_alias.so ...
同じような記述が並んでいると思いますが、モジュール1つに付き1行記述します。書式は「LoadModule モジュール名 ファイル名」です。
なお先頭に「#」が記述されている行はコメントとなっています。今度必要なモジュールの先頭に「#」が付いている場合は「#」を外してモジュールを読み込むようにします。逆に不要なモジュールの先頭に「#」を記述するとコメント扱いとなりモジュールを読み込まなくなります。(もちろん行そのものを削除しても同じです)。
「ServerAdmin」はApacheがエラー表示を行う場合などに、問い合わせ先となる連絡先メールアドレスを表示する時に使われます。210行目付近を見てください。
ServerAdmin postmaster@localhost
利用者の方がWebサーバの管理者に対して問い合わせをする場合のメールアドレスを指定して下さい。例えば「ServerAdmin admin@example.jp」などです。
「ServerName」はApacheサーバが自分自身のホスト名を示す時に使われる名前を指定します。219行目付近を見てください。
ServerName localhost:80
書式は「ホスト名:ポート番号」ですがポート番号は省略も可能です。例えば「ServerName www.example.jp:80」や「ServerName www.example.jp」などのように記述します。
「DocumentRoot」はWebサーバとして公開するコンテンツを配置しておくルートディレクトリを指定します。243行目付近を見てください。
DocumentRoot "C:/xampp/htdocs"
ディレクトリは絶対パス、又は「ServerRoot」からの相対パスで指定します。最後にスラッシュ(/)は記述しないで下さい。
配置されたファイルとクライアントからのリクエストの関係は次のようになります。
(例1) ブラウザからのリクエストURL http://localhost/index.html クライアントへ返される実際のファイル C:/xampp/htdocs/index.html (例2) ブラウザからのリクエストURL http://localhost/sub/index.html クライアントへ返される実際のファイル C:/xampp/htdocs/sub/index.html
コンテンツの配置については次のページで詳しく確認します。
201行目を見てください。途中でコメントなどが入っていますが、次のような記述があります。
<Directory /> AllowOverride none Require all denied </Directory> <Directory "C:/xampp/htdocs"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory>
細かい解説は省略させて頂きますが、まずWebサーバが起動しているPCのルートディレクトリ以下の全てのディレクトリに対してWebサーバ経由で外部からのアクセスを拒否しています。この設定によってXAMPPも含むPC内の全てのディレクトリに含まれるファイルに外部からアクセスできなくなります。
次に「C:/xampp/htdocs」ディレクトリ以下の全てのディレクトリに対してアクセスを許可しています。このディレクトリはApacheのドキュメントルートで設定されたディレクトリであり、外部からはこのディレクトリ(及び全てのサブディレクトリ)に含まれるファイルを閲覧することができるようになります。
つまりいったん全てのディレクトリに対してWebサーバ経由でのアクセスを禁止し、その後で公開するコンテンツを設置するディレクトリ及びそのサブディレクトリだけを公開しています。これで必要最小限のデータのみ外部に公開することができるようになります。
またドキュメントルートのディレクトリに対してはオプションが次のように設定されています。
<Directory "C:/xampp/htdocs">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
これは次のような意味を持ちます。
Indexes ファイルが指定されていない時にファイル一覧表示 FollowSymLinks シンボリックリンクの許可 Includes SSIを有効にする ExecCGI CGIの実行を許可
この中で「Indexes」は例えば「http://localhost/dir/subdir/」にようにファイル名が省略された形でリクエストがあり、またindex.htmlなど省略された時に表示するように指定されたファイルも存在しなかった場合にディレクトリに含まれるファイルの一覧を表示するオプションです。このオプションはセキュリティ的に望ましくない設定なので次のように書き換えます。
<Directory "D:/xampp/htdocs">
Options FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
これでファイル一覧は表示されなくなります。
「DirectoryIndex」はファイル名が省略された形でリクエストがあった場合に、どのファイルを表示するのかを指定します。276行目付近を見てください。
<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>
例えば「http://localhost/」のようにリクエストがあった場合には、次のようにファイルを検索していきます。
http://localhost/index.php http://localhost/index.pl http://localhost/index.cgi http://localhost/index.asp http://localhost/index.shtml http://localhost/index.html http://localhost/index.htm http://localhost/default.php ... ...
もしも「http://localhost/index.php」が存在すれば「http://localhost/index.php」としてリクエストがあったように処理します。もしも「index.php」ファイルがディレクトリに存在しなければ次の「http://localhost/index.pl」を探します。そして順に探していき、全て見つからなければファイルが存在しないといったエラーを表示します。(Options Indexesが指定されていた場合はディレクトリに含まれるファイルの一覧を表示します)。
現状「http://localhost/」とブラウザからアクセスすると「c:/xampp/htdocs」ディレクトリにはindex.phpとindex.htmlファイルが存在しますので、「c:/xampp/htdocs/index.php」ファイルをリクエスト元に返しています。
例えば「index.html」をまず探して欲しい場合は次のように「DirectoryIndex」の値を書き換えます。
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
これで「http://localhost/」のようにリクエストがあった場合には、まず最初に「http://localhost/index.html」を探し、次に「index.php」を探します。
.htaccessファイル及び.htpasswdファイルへのアクセス制限を確認します。286行目付近を見てください。
<Files ".ht*"> Require all denied </Files>
この設定は仮にドキュメントルート以下のディレクトリに含まれるファイルであっても「.ht」で始まるファイルへの外部からのアクセスを禁止しています。具体的には.htaccessファイルや.htpasswdファイルを外部から参照できないように設定しています。
「ErrorLog」はエラーログが書き出されるファイルを指定します。297行目付近を見てください。
ErrorLog "logs/error.log"
相対パスで記述されていますので「ServerRoot」からの相対位置での指定となっていますので実際の位置は「c:/xampp/apache/logs/error.log」となります。
また「LogLevel」を設定することで、どのレベルまでのエラーを記録するかを8段階で指定することが可能です。304行目付近を見てください。
LogLevel warn
現在設定されている「warn」は警告以上のエラーをログに記録します。
これ以降は個別のモジュールに関する設定となりますので今後必要に応じて確認していきます。
( Written by Tatsuo Ikura )