XAMPPを用いてデータベースシステムを作成する2 Apache編

Web開発
XAMPPを用いてデータベースシステムを作成する1 XAMPP編
XAMPP とは、よく利用されるアプリケーションやソフトウェアをまとめたもので、一括でインストールすることができるようになっているソフトパッケージです。数年前から勉強を兼ねて、XAMPPを使いWebデータベースシステムを作ることに何度か取...

↑からの続きです。

「XAMPPを用いてデータベースシステムを作成する1 XAMPP編」では、XAMPPのインストールから各アプリの起動・停止など基本的なことを書きました。

しかし、データベースを用いたWebシステムを作っていくにはまだ正常に動作しない状態です。

デフォルトのままでは、文字化けなどのエラーが出てシステムを作っていくことはできません。

正常に動作するように、XAMPP・Apache・PHP・MariaDB の各設定をしておく必要があるのです。

ここでは、Apache の設定などの説明をすることにします。

Apacheとは?

「Apache」、「アパッチ」と読みます。

Apache は世界中で使用されているWebサーバーソフト(HTTPサーバー)です。

Webサーバーがなくては作ったサイトを登録し、ブラウザを通してそのサイトを見たりすることができません。

通常、インターネットを介してWebサーバーにあるサイトをクライアント(自分の使っているパソコン)からURLでリクエストしてそのサイトを送ってもらっています。

サーバー・クライアント1

イメージとしてはこんな感じです。

コンピュータにWebサーバー機能を持たせるにはWebサーバーソフトが必要になってきます。

それを実現する一つのソフトがApacheです。

Webサイトを作る

単に文章や画像を表示するサイトを作成する場合は、エディタでHTMLやCSSを書けばブラウザで確認しながら作成していけます。

また、ちょっとした動きのあるものを作る場合でもJavaScriptを組み合わせてエディタでコードを書いていけばいいことです。

どのように表示するか動作するかもブラウザで確認できます。

パソコンが1台あればWebサイトは作っていけます。

そして、完成して公開するのであれば、どこかのWebサーバーにUpすればいいことです。

しかし、これは作成時にテストとしてネットをシミュレーションできません。

実際には、先に説明しましたように作ったサイトは自分が使っているパソコン以外のWebサーバーに登録してインターネットを介してブラウザに表示します。

また、私が目的としているデータベースを使ったサイトを作るにはWebサーバーが必須です。

何故なら、データベースはWebサーバー内でしか動かせないからです。

だからといって、外部にWebサーバーを作るには別のパソコンに作るか、業者に貸してもらうしかありません。

無料のサーバーもありますが、全く無償でというわけにもいかないですし、テスト的に使うだけで外部にサーバーを持つというのもということになります。

そこで、自分の使っているパソコンにWebサーバーを作ってしまいます。

サーバー・クライアント2

こんなイメージです。

1台のパソコンにWebサーバーとクライアントの一人二役をさせるのです。

これはApacheを自分のパソコンにインストールすることにより実現することができます。

Apacheのインストールは

XAMPPを用いてデータベースシステムを作成する1 XAMPP編
XAMPP とは、よく利用されるアプリケーションやソフトウェアをまとめたもので、一括でインストールすることができるようになっているソフトパッケージです。数年前から勉強を兼ねて、XAMPPを使いWebデータベースシステムを作ることに何度か取...

↑の記事内容に従っていけばできるはずです。

インストールは後は、ApacheをXAMPPコントロールパネルから起動すれば自分のパソコンにWebサーバーが動き出します。

もちろん、クライアント側であるブラウザも自分のパソコンで起動できますのでインターネットの世界がパソコン1台の中に展開できるわけです。

 

少し、前置きが長くなりましたがApacheをインストールしているものとしてApacheの設定を以下に書いていきます。

Apacheの設定

Apacheの設定ファイルは httpd.conf ファイル及びその他のファイルです。

「C:\xampp\apache」の中にそれらファイルはあります。

httpd.conf  は「C:\xampp\apache\conf」にあります。

以前のバージョンでは全ての設定を http.conf ファイル(以前は httpd.conf ではなく、http.conf  でした)に記述していましたが、Apache2.2系からはいくつかの設定内容は別ファイルに分離し、必要に応じて「httpd.conf」に読み込むようになりました。

詳細設定ファイルは「conf\extra」ディレクトリの中にあります。

設定ファイルはエディタで開けますが、XAMPPコントロールパネルのApacheのところにある「Config」ボタンをクリックしても開くことができます。

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

私も詳しくは分からないので、ネットで調べた必要であろうことを書いていきます。

以下、httpd.conf ファイルの確認と修正箇所です。

修正前に、元の httpd.conf は バックアップを取っておくといいでしょう。

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

httpd.conf の以下の部分を修正します。

httpd.conf をエディタで開きますと、割と長いのでどの部分かを探すにはキーワードで検索してください。

尚、行頭に「#」がある行はコメント行で無効な行です。

ServerRoot

ServerRoot は Apache がインストールされているディレクトリです。

ServerRoot “C:/xampp/apache”

と、XAMPPをインストールした時のディレクトリに合わせて自動的に設定がされているはずですので通常は変更する必要はありません。

Apacheの各種設定の中で絶対パスではなく相対パスで記述されている場合はこの ServerRoot で指定したディレクトリからの相対パスとなります。

Listen

Listen は Apache が外部からリクエストを受け付けるポート番号を指定します。

Listen 80

Webサーバはポート番号80番を使用するのが一般的です。

もし、既に80番ポートを使用している場合などは、違うポート番号を設定して下さい。

LoadModule

LoadModule は利用するモジュールを指定します。

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

ServerAdmin postmaster@localhost

利用者の方がWebサーバの管理者に対して問い合わせをする場合のメールアドレスを指定します。

ここもApacheを開発のテストとして使う場合は、修正しなくていいです。

ServerName

ServerName は Apache サーバが自分自身のホスト名を示す時に使われる名前を指定します。

ServerName localhost:80

書式は「ホスト名:ポート番号」ですがポート番号は省略も可能です。

例えば「ServerName www.example.jp:80」や「ServerName www.example.jp」などのように記述します。

ここもApacheを開発のテストとして使う場合は、修正しなくていいです。

DocumentRoot

DocumentRoot はWebサーバとして公開するコンテンツを設置しておくルートディレクトリを指定します。

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

ここも修正する必要はありません.

公開するコンテンツ(作成したhttpやphp ファイル)は「C:\xampp\htdocs」に入れることだけ覚えておいてください。

アクセス制限

<Directory />
AllowOverride none
Require all denied
</Directory>

この設定で、Webサーバが起動しているPCのルートディレクトリ以下の全てのディレクトリに対してWebサーバ経由で外部からのアクセスを拒否しています。

この設定によってXAMPPも含むPC内の全てのディレクトリに含まれるファイルに外部からアクセスできなくなります。

これで、全てにアクセスできなくなっていますが、以降の設定で部分的にアクセス可能になるように設定しています。

以下、修正する部分があります。

<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>

1. Require all granted

この設定で、「C:\xampp\htdocs」ディレクトリ以下の全てのディレクトリに対してアクセスを許可しています。

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

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

Order allow,deny
Allow from all

つまりいったん全てのディレクトリに対してWebサーバ経由でのアクセスを禁止し、その後で公開するコンテンツを設置するディレクトリ及びそのサブディレクトリだけを公開しています。

これで必要最小限のデータのみ外部に公開することができるようになります。

2.AllowOverride All

「.htaccess」ファイルのすべての設定が有効になります。

3. Options Indexes FollowSymLinks Includes ExecCGI

ここは修正が必要です。

この設定で、

Indexes         ファイルが指定されていない時にファイル一覧表示
FollowSymLinks  シンボリックリンクの許可
Includes        SSIを有効にする
ExecCGI         CGIの実行を許可

が指定されています。

Indexes は、http://localhost/dir/subdir/ のようにファイル名が省略された形でリクエストがあり、またindex.htmlなど省略された時に表示するように指定されたファイルも存在しなかった場合にディレクトリに含まれるファイルの一覧を表示するオプションです。

このオプションはセキュリティ的に望ましくありませんので次のように修正します。

<Directory “C:/xampp/htdocs”>
Options FollowSymLinks Includes ExecCGI        ← Indexes を削除した
AllowOverride All
Require all granted
</Directory>

最初に書いた長い設定部分の行頭に「#」が付いているコメント行をは無くてもいいですので、取ってしまうとこれだけになります。

以上ででファイル一覧は表示されなくなります。

DirectoryIndex

DirectoryIndex はファイル名が省略された形でリクエストがあった場合に、どのファイルを表示するのかを指定します。

<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」

のように設定した順に検索していき存在するファイルをリクエストがあったように処理します。

順に探していき、全て見つからなければファイルが存在しないといったエラーを表示します。

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ファイルへのアクセス制限

確認だけです。

<Files “.ht*”>
Require all denied
</Files>

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

具体的には.htaccessファイルや.htpasswdファイルを外部から参照できないように設定しています。

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

Order deny,allow
Deny from all

※.htaccess とは

「.htaccess」とは、ApacheなどのWebサーバー環境でのディレクトリ単位の設定ファイルです。

ファイル名の先頭にドット「.」があることに注意してください。

「.htaccess」が特定のディレクトリに設置されると、「.htaccess」内に記述されている内容が、設置されたディレクトリ内とその下層のディレクトリ内に対して適用されます。

※.htpasswd とは

アカウントとパスワードを入れさせるページを設けて、特定の人にしか閲覧できないようにすることを「Basic認証」と呼びます。

この「Basic認証」を行うために照合するアカウントとパスワードを記載したファイルが「.htpasswd」です。

ErrorLog & LogLevel

ErrorLog はエラーログが書き出されるファイルを指定します。

ErrorLog “logs/error.log”

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

また「LogLevel」を設定することで、どのレベルまでのエラーを記録するかを8段階で指定することが可能です。

LogLevel warn

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

これ以降は個別のモジュールに関する設定となります。

個別のモジュールについては、追々調べて書き込んでいこうと思っていますが、一応、設定としては以上です。

 

結局、修正箇所は、

Options Indexes FollowSymLinks Includes ExecCGI

Options FollowSymLinks Includes ExecCGI

にするくらいでしょうか。

後は、デフォルトのままでサーバーをテスト的には使えると思います。

どなたかここも必要という場合は、ご指摘ください。

公開コンテンツの配置

Apache の設定ができたら起動し直してください。修正した設定が反映されます。

そして、Webサーバーが正常に稼働し始めるはずです。

後は、実際に公開するhtmlファイルなどをWebサーバーのドキュメントルートに入れて、ブラウザからアクセスすることで作成したコンテンツがどのように表示されるか確認できます。

ドキュメントルート

外部に公開するコンテンツ(htmlファイルなど)は httpd.confファイルの DocumentRoot で指定したディレクトリ(ドキュメントルートと呼ぶ)に入れます。

上の設定では c:\xampp\htdocs です。

このディレクトリにはXAMPPインストール時に「index.php」ファイルが作られています。

「http://localhost/」をブラウザから指定し、アクセスすると http://localhost/index.php が表示されます。

(実際には http://localhost/dashboard/index.html が表示されます。)

独自コンテンツの配置

Webサーバを外部に公開して独自のコンテンツを配信する場合や作成したコンテンツの表示テストなどをする場合にも、ドキュメントルートに配置します。

つまり、Webサーバを使う場合、ドキュメントルート「c:\xampp\htdocs」に作成したコンテンツを入れておけばいいのです。
(他に入れるところはありません。ドキュメントルート内にサブディレクトリを作り、そこに入れてもアクセスできます。)

例として sample.html というコンテンツを配置して、ブラウザからアクセスします。

例1 ドキュメントルート「c:\xampp\htdocs」に配置

ブラウザからのリクエストURL:http://localhost/sample.html

例2 ドキュメントルート下の「c:\xampp\htdocs/sub」に配置

ブラウザからのリクエストURL:http://localhost/sub/sample.html

ブラウザからそれぞれのURLへアクセスすると、自分で作成したHTMLページが表示されることになります。

 

最後にこの記事を書いていてちょっとややこしい点がありました。

Apacheのことではなく「パスの区切り」についてです。

つまり、c:\xampp\htdocs の中で使われている 「\」です。

設定ファイルの中では、C:/xampp/htdocs というように「/」が使われています。

これは、日本語版Windowsでは、半角の円マーク「\」が区切り文字に使われているからです。

逆に、日本語版Windowsでは、半角のバックスラッシュ「\」はフォントを指定しないと表示できません。

私が使用しているOSは日本語版Windowsですので、「\」は全角文字で書いています。

これは、使用している文字コードの違いから生じていることで、英語圏のWindowsで使用されている「\」のASCII文字コードが、日本語版WindowsのJISコードでは「\」に相当するためです。

つまり、使っているフォントのコード番号が同じであっても、そのコード番号に割り付けられている文字がフォントによって異なっているからです。

UNIXでは「パスの区切り」に「/」が使われおり、ネットワーク上でUNIXのように振る舞っているコンピュータもこれに準じます。

従って、インターネットの URLも UNIX と同じように「パスの区切り」は「/」となっており、設定ファイル中の「パスの区切り」は C:/xampp/htdocs というように「/」が使われています。

全角文字なら「/」も「\」も表示できるのですが、プログラムなどコンピュータで動作させるものは半角文字で書くことになっています。

ですので、日本語版Windowsの環境では「\」の半角文字は使えなく「\」を使用しているわけです。

まとめますと、

日本語版Windowsでの「パス区切り」には半角の「\」

日本語版Windowsであっても、ネット環境下の設定などの「パス区切り」には、半角の「/」

をそれぞれ使うということになります。

 

話がそれてしまいましたが、以上でApacheの設定と使い方の説明を終わります。

次は PHP の設定と確認です。

コメント

タイトルとURLをコピーしました