設定ファイルの確認と修正

広告

http.confファイルに記載されているデフォルトの内容を確認し、また修正を一部行います。設定ファイルの場所は前のページで解説いたしましたが「(XAMPPインストールディレクトリ)\apache\conf\http.conf」にあります。ファイルの修正も一部行いますので心配であれば修正前のファイルをコピーしてバックアップを取っておいて下さい。

なお設定ファイルを変更した場合、新しい設定をApacheに反映させるにはApacheを再起動する必要があります。

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がインストールされているディレクトリを表します。37行目付近を見てください。

ServerRoot "C:/xampp/apache"

私の環境では「c:\xampp\apache」となっています。XAMPPをインストールした時のディレクトリに合わせて自動的に設定がされているはずですので通常は変更する必要はありません。Apacheの各種設定の中で絶対パスではなく相対パスで記述されている場合はこのServerRootで指定したディレクトリからの相対パスとなります。

「Listen」はApacheが外部からリクエストを受け付けるポート番号を指定します。58行目付近を見てください。

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がエラー表示を行う場合などに、問い合わせ先となる連絡先メールアドレスを表示する時に使われます。212行目付近を見てください。

ServerAdmin postmaster@localhost

利用者の方がWebサーバの管理者に対して問い合わせをする場合のメールアドレスを指定して下さい。例えば「ServerAdmin admin@example.jp」などです。

「ServerName」はApacheサーバが自分自身のホスト名を示す時に使われる名前を指定します。221行目付近を見てください。

ServerName localhost:80

書式は「ホスト名:ポート番号」ですがポート番号は省略も可能です。例えば「ServerName www.example.jp:80」や「ServerName www.example.jp」などのように記述します。

「DocumentRoot」はWebサーバとして公開するコンテンツを設置しておくルートディレクトリを指定します。245行目付近を見てください。

DocumentRoot "C:/xampp/htdocs"

ディレクトリは絶対パス、又は「ServerRoot」からの相対パスで指定します。最後にスラッシュ(/)は記述しないで下さい。絶対パスで記載されていますのでApacheで公開するコンテンツは「C:/xampp/htdocs」に設置します。

p2-1

配置されたファイルとクライアントからのリクエストの関係は次のようになります。

(例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のドキュメントルートで設定されたディレクトリであり、外部からはこのディレクトリ(及び全てのサブディレクトリ)に含まれるファイルを閲覧することができるようになります。

Require all grantedはApache2.4系の記述方法で、Apache2.2系で次のように書いていたのと同じ意味です。

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」はファイル名が省略された形でリクエストがあった場合に、どのファイルを表示するのかを指定します。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」ファイルへのアクセス制限を確認します。288行目付近を見てください。

<Files ".ht*">
    Require all denied
</Files>

この設定は仮にドキュメントルート以下のディレクトリに含まれるファイルであっても「.ht」で始まるファイルへの外部からのアクセスを禁止しています。具体的には.htaccessファイルや.htpasswdファイルを外部から参照できないように設定しています。

Require all deniedはApache2.4系の記述方法で、Apache2.2系で次のように書いていたのと同じ意味です。

Order deny,allow
Deny from all

「ErrorLog」はエラーログが書き出されるファイルを指定します。299行目付近を見てください。

ErrorLog "logs/error.log"

相対パスで記述されていますので「ServerRoot」からの相対位置での指定となっていますので実際の位置は「c:/xampp/apache/logs/error.log」となります。

p2-2

また「LogLevel」を設定することで、どのレベルまでのエラーを記録するかを8段階で指定することが可能です。306行目付近を見てください。

LogLevel warn

現在設定されている「warn」は警告以上のエラーをログに記録します。

これ以降は個別のモジュールに関する設定となりますので今後必要に応じて確認していきます。

( Written by Tatsuo Ikura )