Apacheの基本設定をしていこう

Apacheの設定は全てhttpd.confで行います。
httpd.confはC:\Program Files\Apache Group\Apache2\confにあります。

WindowsでApache 基本設定

スタートメニューからすべてのプログラム、Apache HTTP Server、Configure Apache Server、Edit the Apache httpd.conf Configuration Fileを指定しても開けます。

Apacheを起動すると、Apacheはhttpd.confを読み込んで、そこに書かれた通りに振る舞うわけです。
ということはhttpd.confを書き換えた場合はApacheを再起動しなければならないことが分かりますね。


WindowsでApache 基本設定

再起動、スタート、終了はスタートメニュー内のApache HTTP Server 2.0.54、Control Apache Server内に入っています。
設定を変更したら必ず再起動してhttpd.confを読み込むようにしましょう。

さて、実際にhttpd.confを開くと英語がずらずらずら〜と書かれています。
私のように英語がまったく駄目人間の場合、これだけで萎えてしまいますよね。
ところでこの英文を眺めていると、全文の9割以上は先頭に#がついてことが見て取れるかと思います。
これはいわゆるコメント行と呼ばれる物で、Apacheは先頭が#で始まる行は見ていません=読み込んでいません。
つまりですね、httpd.confの9割以上の英文は不要なのです。
実際そこには説明文が書かれているに過ぎません。
コメント行全てを消去しても問題ないばかりではなく、ハードディスクの容量軽減といっても間違いではありません。
(実際にやっても構いませんが、その労力ほど容量軽減はされませんよ、しょせんテキストデータですから)

実際に#を全て取り除いてみました=Apacheがデフォルトで読み込んでいる内容です。
#less.httpd.conf

ここから本題というか、設定方法を順に解説していきましょう。
では、httpd.confを開いて、上から順に眺めていきましょう。
コメント行ではないところを探していきます。

Section 1

サーバールート

ServerRoot "C:/Program Files/Apache Group/Apache2"

Apacheがインストールされている場所を表します。変更する必要はありません。

PidFile logs/httpd.pid
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
MaxKeepAliveRequests 100

特に変更する必要はないでしょう。

<IfModule mpm_winnt.c>
ThreadsPerChild 250
MaxRequestsPerChild 0
</IfModule>

今後このような表示がいくつも出てきます。
意味としては、もしmpm_winnt.cというモジュールが組み込まれていれば、
ThreadsPerChild 250
MaxRequestsPerChild 0
ですよ、という意味です。
<IfModule mpm_winnt.c>ではじまり、
間に命令を書き込んで
</IfModule>で終了宣言です。

ポートの設定

Listen 80

HTTPサーバーの待ち受けポートを指定します。変更する必要はありません。
8080に変更した場合、http://mizushima.ne.jp/:8080 のようにアクセスする必要が出てきます。

LoadModule access_module modules/mod_access.so

以下同じようなものがいろいろ出てますね。
mod_access.soというモジュールを読み込みますよ、という意味です。
ここも変更する必要はないでしょう。

Section 2

管理者のメールアドレス

ServerAdmin mns@mizushima.ne.jp

インストール時に指定したかと思いますが、サーバー管理者のメールアドレスです。

サーバーの名前

ServerName mizushima.ne.jp:80

ここもインストール時に指定したドメインに:80がついているだけだと思います。
変更の必要はありません。

UseCanonicalName Off

変更の必要はありません。

ドキュメントルート

DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs"

変更

DocumentRoot "D:/Apache"

ドキュメントルートというのはURLが
http://mizushima.ne.jp/
で表示されるフォルダを示します。

サーバー内のフォルダ位置  C:\Program Files\Apache Groupe\Apache2\htdocs
ブラウザから見る場合      http://mizushima.ne.jp/

このままでは階層が深く不便なので、それこそD:/Apacheとでも変更しておきましょう。
ここで一つ注意したいのは、httpd.confではC:/Program Files/Apache Groupe/・・・のように書いてください。
Windowsでは通常C:\Program Files\Apache Groupe\・・・ですよね。間違えないでください。

ディレクトリの指定方法

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

変更

<Directory />
Options FollowSymLinks ExecCGI
AllowOverride AuthConfig Limit
</Directory>

ここ大事です。よく見てください。
<IfModule mpm_winnt.c>
</IfModule>
と形が似ていますね。意味も似たようなものになります。
このディレクトリ=フォルダ内では
FollowSymLinks シンボリックリンク有効
ExecCGI CGI有効
AllowOverride AuthConfig Limit .htaccessによるユーザー認証、アクセス制限有効
という意味になります。

ディレクトリの指定方法の応用1

全ディレクトリを指定する場合は
<Directory />
</Directory>

と書きますが、さらに下の階層のディレクトリを指定してやれば、下の階層で書かれた設定が有効になります。
例えば、全ディレクトリでCGIの利用を不可にしても、このディレクトリだけはCGIの利用を許可したい、ということが実現できるわけです。

ディレクトリの指定方法の応用2

このような書き方もあります。
<Directory "D:/www/*/public_html">
</Directory>
この書き方では、Dドライブ内のホームフォルダ、その下のフォルダ(例えばユーザーネームを割り当てる)すべて、さらにその下のpublic_htmlフォルダに対し制限を掛けるということです。
すべてのユーザーフォルダ内のpublic_htmlに制限を掛けるような時に使います。

ユーザーディレクトリ

UserDir "My Documents/My Website"

変更

UserDir "D:/user/*/public_html"

ユーザーディレクトリを指定します。
ユーザーディレクトリというのは・・・具体例を出した方が早いですね。kokoのユーザーディレクトリを考えます。
kokoのユーザーディレクトリというのは
http://mizushima.ne.jp/~koko/
で表されるフォルダを指定する設定のことです。
http://mizushima.ne.jp/~koko/で
D:\user\koko\public_htmlが参照されます。
つまりkokoのユーザーディレクトリというのは
http://mizushima.ne.jp/~koko/
で表されるディレクトリでありながら、ホームディレクトリ配下にあるディレクトリではなくなるのです。

ちなみにここではD:\user\koko\public_htmlを指定しました。
ドキュメントルートは上の設定ではD:\Apacheです。
つまりD:\user\kokoというディレクトリはインターネット側からは見えないことになりますね。
そしてFTPでのkokoのホームディレクトリをD:\user\kokoに指定してやれば・・・
ユーザーkokoはホームディレクトリD:\user\kokoで他人に見られたくないファイルの管理、D:\user\koko\public_htmlでは他人=インターネットで公開するファイルを使い分けることができるようになるわけです

ディレクトリインデックス

DirectoryIndex index.html index.html.var

変更

DirectoryIndex index.html index.html.var index.php index.cgi

さて、うちのサイトなどを見ると、URLはhttp://mizushima.ne.jp/になっていますよね。
しかし上述した通り、http://mizushima.ne.jp/というのはドキュメントルートであるD:\Apache\public_htmlというフォルダにすぎません。
つまり、このままではhtmlファイルを表示することはなく、通常はエラー表示されることになります。
言っていることが分かるでしょうか?
つまり当サイトの場合、正確なトップページのアドレスというのは
http://mizushima.ne.jp/index.html
になるわけです。
が、まぁ実際にはindex.htmlを打ち込むことなくトップページが開いているわけですね。
その設定がこのディレクトリインデックスです。
これはフォルダのみを指定した場合、サーバー(Apache)が自動でどのファイルを表示するか検索してくれる設定です。
通常はここにindex.htmlとあるので、http://mizushima.ne.jp/というURLでhttp://mizushima.ne.jp/index.htmlが表示されるわけです。
左側に書かれているものから順に検索されていきます。

http://mizushima.ne.jp/index.html → http://mizushima.ne.jp/

.htaccess

AccessFileName .htaccess
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>

変更

AccessFileName mns.htaccess
<Files mns.htaccess>
Deny from all
</Files>
ついでに
<Files mns.htpasswd>
Deny from all
</Files>

.htaccessの設定です。mnsのところは好きな名前に置き換えてください。
.htaccessとはApacheの動作をディレクトリ単位で操作するためのファイルです。
Windowsでは拡張子だけのファイルというのは扱えないので、mns.htaccessが.htaccessの働きをするようにしました。
mns.htaccessおよびmns.htpasswdのファイルには誰もがブラウザからのアクセスを禁止します、という意味の指定をしてあります。

TypesConfig conf/mime.types
DefaultType text/plain

変更の必要はありません。

ホストネームの取得

HostnameLookups Off

変更の必要はありません。
Onにするとホストネームを取得するようになりますが、その分パフォーマンスが落ちます。

ログ関係の設定

ErrorLog logs/error.log
LogLevel warn
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

ログ関係の設定です。私は特別変更していません。

サーバー情報の表示

ServerTokens Full
ServerSignature On

変更

ServerSignature Off
ServerTokens ProductOnly

例えば存在しないページにアクセスした場合、サーバーはエラーメッセージを返します。
ですがエラーメッセージにはApacheのバージョン、OS、IPアドレス、ポート情報が公開されてしまうので書き換える必要があります。

エイリアスの設定

Alias /icons/ "C:/Program Files/Apache Group/Apache2/icons/"
<Directory "C:/Program Files/Apache Group/Apache2/icons">
</Directory>

少々省略してありますがエイリアスの設定です。
Alias /フォルダ名/ "フォルダのパス"で書き表され、ユーザーディレクトリの様に使われます。
上の表示はhttp://mizushima.ne.jp/icons/で表されるフォルダを設定していることになります。
ユーザーディレクトリのように/~nameで表されるわけではないんですね。

以下ずらずら書かれていますが、特別触る必要はないでしょう。
最後になりましたが、ディレクトリを指定した中で使う語句を紹介しておきます

Optionsの書き方

Optionsと書いた後に続けて書き込みます。

例 Options FollowSymLinks ExecCGI

None 全オプションを無効にする
All MultiViews以外の全オプションを有効にする
Indexes INDEXファイルがないときにファイルやディレクトリの一覧を表示する
Includes SSIを有効にする
FollowSymLinks シンボリックリンクを有効にする
SymLinksifOwnerMatch 所有者が一致する場合のみシンボリックリンクを有効にする
ExecCGI CGIを有効にする
MultiViews Content Negotiation機能を有効にする

AllowOverrideの書き方

Alloowoverrideと書いた後に続けて書き込みます。
デフォルトの設定でよく見かけるのがAllowOverride Noneですね。

None 上書きを許しません
ALL 下記の設定を全て設定する場合
AuthConfig ユーザー認証をする場合
Limit ホスト名やIP addressによるアクセス制御をする場合
Options Options指定子で設定する機能について上書きを許す場合
FileInfo ディレクトリ表示の設定について上書きを許す場合

以上でApacheの基本設定とさせていただきます。
スキルのない私が言うのもなんですが、Apacheはディレクトリやファイルを指定して事細かにコントロールすることができる反面、その自由度の高さから管理人にはスキルが求められます。
他にもApacheを解説したサイトは非常に多いです。
ぜひ、困ったときは他サイト様も参考にしながら挑戦してみてください。

お疲れ様でした。

Perlを導入しよう