設定ファイルの確認と修正
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
「ServerRoot」はApacheがインストールされているディレクトリを表します。37行目付近を見てください。
ServerRoot "C:/xampp/apache"
私の環境では「c:\xampp\apache」となっています。XAMPPをインストールした時のディレクトリに合わせて自動的に設定がされているはずですので通常は変更する必要はありません。Apacheの各種設定の中で絶対パスではなく相対パスで記述されている場合はこのServerRootで指定したディレクトリからの相対パスとなります。
Listen
「Listen」はApacheが外部からリクエストを受け付けるポート番号を指定します。58行目付近を見てください。
Listen 80
Webサーバはポート番号80番を使用するのが一般的です。もしApacheの他にもWebサーバを起動している場合で既に80番ポートを使用している場合などは、違うポート番号を設定して下さい。
LoadModule
「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
「ServerAdmin」はApacheがエラー表示を行う場合などに、問い合わせ先となる連絡先メールアドレスを表示する時に使われます。212行目付近を見てください。
ServerAdmin postmaster@localhost
利用者の方がWebサーバの管理者に対して問い合わせをする場合のメールアドレスを指定して下さい。例えば「ServerAdmin admin@example.jp」などです。
ServerName
「ServerName」はApacheサーバが自分自身のホスト名を示す時に使われる名前を指定します。221行目付近を見てください。
ServerName localhost:80
書式は「ホスト名:ポート番号」ですがポート番号は省略も可能です。例えば「ServerName www.example.jp:80」や「ServerName www.example.jp」などのように記述します。
DocumentRoot
「DocumentRoot」はWebサーバとして公開するコンテンツを設置しておくルートディレクトリを指定します。245行目付近を見てください。
DocumentRoot "C:/xampp/htdocs"
ディレクトリは絶対パス、又は「ServerRoot」からの相対パスで指定します。最後にスラッシュ(/)は記述しないで下さい。絶対パスで記載されていますのでApacheで公開するコンテンツは「C:/xampp/htdocs」に設置します。
配置されたファイルとクライアントからのリクエストの関係は次のようになります。
(例1) ブラウザからのリクエストURL http://localhost/index.html クライアントへ返される実際のファイル C:/xampp/htdocs/index.html (例2) ブラウザからのリクエストURL http://localhost/sub/index.html クライアントへ返される実際のファイル C:/xampp/htdocs/sub/index.html
コンテンツの配置については次のページで詳しく確認します。
アクセス制限
228行目を見てください。次のような記述があります。
<Directory /> AllowOverride none Require all denied </Directory>
細かい解説は省略させて頂きますが、まずWebサーバが起動しているPCのルートディレクトリ以下の全てのディレクトリに対してWebサーバ経由で外部からのアクセスを拒否しています。この設定によってXAMPPも含むPC内の全てのディレクトリに含まれるファイルに外部からアクセスできなくなります。
続いて246行目を見てください。次のような記述があります。
<Directory "C:/xampp/htdocs"> # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs/2.4/mod/core.html#options # for more information. # Options Indexes FollowSymLinks Includes ExecCGI # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # AllowOverride FileInfo AuthConfig Limit # AllowOverride All # # Controls who can get stuff from this server. # Require all granted </Directory>
いくつかの記述がありますが「Require all granted」の部分で「C:/xampp/htdocs」ディレクトリ以下の全てのディレクトリに対してアクセスを許可しています。このディレクトリはApacheのドキュメントルートで設定されたディレクトリであり、外部からはこのディレクトリ(及び全てのサブディレクトリ)に含まれるファイルを閲覧することができるようになります。
Order allow,deny
Allow from all
つまりいったん全てのディレクトリに対してWebサーバ経由でのアクセスを禁止し、その後で公開するコンテンツを設置するディレクトリ及びそのサブディレクトリだけを公開しています。これで必要最小限のデータのみ外部に公開することができるようになります。
「AllowOverride All」はここでは詳しく解説しませんが「.htaccess」ファイルのすべての設定が有効になります。
また「Options Indexes FollowSymLinks Includes ExecCGI」の意味は次の通りです。
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
「DirectoryIndex」はファイル名が省略された形でリクエストがあった場合に、どのファイルを表示するのかを指定します。278行目付近を見てください。
<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が指定されていた場合はディレクトリに含まれるファイルの一覧を表示します)。
「index.html」と「index.php」しか使う予定がなければ次のように記述します。
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
またもし「index.html」と「index.php」の両方がディレクトリにあった場合に「index.html」の方を優先して表示して欲しい場合は次のように記述する順番を逆にして下さい。
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
.htaccessファイル及び.htpasswdファイルへのアクセス制限
「.htaccess」ファイル及び「.htpasswd」ファイルへのアクセス制限を確認します。288行目付近を見てください。
<Files ".ht*"> Require all denied </Files>
この設定は仮にドキュメントルート以下のディレクトリに含まれるファイルであっても「.ht」で始まるファイルへの外部からのアクセスを禁止しています。具体的には.htaccessファイルや.htpasswdファイルを外部から参照できないように設定しています。
Order deny,allow
Deny from all
ErrorLog & LogLevel
「ErrorLog」はエラーログが書き出されるファイルを指定します。299行目付近を見てください。
ErrorLog "logs/error.log"
相対パスで記述されていますので「ServerRoot」からの相対位置での指定となっていますので実際の位置は「c:/xampp/apache/logs/error.log」となります。
また「LogLevel」を設定することで、どのレベルまでのエラーを記録するかを8段階で指定することが可能です。306行目付近を見てください。
LogLevel warn
現在設定されている「warn」は警告以上のエラーをログに記録します。
これ以降は個別のモジュールに関する設定となりますので今後必要に応じて確認していきます。
( Written by Tatsuo Ikura )

著者 / TATSUO IKURA
初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。