連載
» 2010年01月29日 00時00分 公開

Apacheで仮想ホストを動かそういまさら聞けない!? Web系開発者のためのサーバ知識(3)(3/3 ページ)

[竹下肯己,株式会社 qnote]
前のページへ 1|2|3       

AllowOverrideと.htaccess

 脱線ついでに、ディレクトリごとに設定を上書きする方法をもう1つ紹介しておきます。

 <Directory "ディレクトリパス"> 〜 </Directory>による設定は、httpd.confなどの設定ファイルに記述するため、Apacheの再起動が必要になります。また、管理者以外は通常は設定ファイルを編集できません。

 そこで、Apacheでは.htaccessというファイルをディレクトリに設置することで、設定の一部を上書きできるようになっています。これはレンタルサーバなどでもよく利用されるおなじみの方法ですね。

 .htaccessの記述は、基本的にhttpd.confと同じなのですが、.htaccessで設定可能な項目とそうでない項目があります。また、.htaccessで設定可能な項目であっても、httpd.confなどの設定ファイル本体側の<Directory "ディレクトリパス"> 〜 </Directory>で上書きが許可されていないと設定できません。

 .htaccessによる設定の上書きを許可するのは、先ほどの設定例にも登場したAllowOverrideです。

 当該ディレクトリ内ですべての項目を.htaccessで設定可能とする場合はAllowOverride Allを、すべて禁止する場合はAllowOverride Noneを記述します。

 AllでもNoneでもなく設定可能項目を明示したいときは、その設定項目の属するグループ名を指定します(Apacheの設定項目は膨大な数になるので、ひとつひとつ列挙することはできません)。なお、AllowOverrideを省略した場合のデフォルト値はAllです。

 ちょっと分かりにくいので、「AcceptPathInfo」という設定項目を例に、Apacheのドキュメントを見ながら説明します。http://httpd.apache.org/docs/2.2/mod/core.html#AcceptPathInfoにアクセスしてください。

AcceptPathInfo (http://httpd.apache.org/docs/2.2/mod/core.html#AcceptPathInfoより)

 説明のなかに上書きという項目があれば、この設定項目は.htaccessで設定可能です。上書きという項目の右に書いてあるのが、AllowOverrideで指定すべき設定のグループ名です。

 この例では、AllowOverride FileInfoと書けば、.htaccessでAcceptPathInfoの設定を上書きできるということになります。例えば、以下のような感じです。

●httpd.confの設定
<Directory "/aaa/bbb">
 
    # /aaa/bbbの配下では'AcceptPathInfo'の設定はデフォルトでは無効とします
    AcceptPathInfo Off
 
    # でも'FileInfo'グループに属する設定項目は、.htaccessで上書きして良いですよ
    AllowOverride FileInfo
 
</Directory>
●/aaa/bbb/ccc/.htaccessの設定
# /aaa/bbb/cccの配下では、'AcceptPathInfo'の設定は有効にしたい
AcceptPathInfo On

 AllowOverrideについての詳細は、http://httpd.apache.org/docs/2.2/mod/core.html#allowoverrideを、.htaccessについての詳細は、http://httpd.apache.org/docs/2.2/ja/howto/htaccess.htmlを参照してください。

仮想ホストとして設定されていないホスト名でのアクセス

 ところで、先ほどvhost1とvhost2について仮想ホストの設定をし、ドキュメントルートを指定しました。このとき、そもそもこのサーバのデフォルトのホスト名(今回の例ではcent53)でWebブラウザからアクセスすると何が表示されるのでしょうか。

 仮想ホストの設定がされていないホスト名でアクセスされた場合、設定ファイル上で最初に見つかった仮想ホストの設定が適用されます。つまり、今回の例では、「http://cent53/」でも「http://vhost1/」でも同じ結果となります。

 デフォルトのホスト名でアクセスされた場合の動作を指定したい場合は、別途仮想ホストの設定をするか、もしくは特定の仮想ホストの設定が適用されるように明示します。例えば次のようになります。

# デフォルトのホスト名も仮想ホストとして登録する場合
<VirtualHost *:80>
    ServerName ホスト名
    DocumentRoot /var/www/html
    ServerAdmin root@cent53
</VirtualHost>
 
# デフォルトのホスト名のとき、特定の仮想ホストの設定を適用させたい場合
<VirtualHost *:80>
    ServerName vhost2
    〜 中略 〜
    ServerAlias ホスト名  ←これを追加します
    〜 中略 〜
</VirtualHost>

アクセス制御

 先ほどの仮想ホストの設定の<Directory "ディレクトリパス"> 〜 </Directory>のなかに、OrderやAllowといった設定項目がありました。これはディレクトリごとのアクセス制御の設定です。

 アクセス制御のために利用される設定項目は、OrderAllow fromDeny fromです。Allowはアクセスを許可する対象を、Denyはアクセスを拒否する対象を記述します。Orderは、AllowとDenyの評価順序を指定します。

 AllowやDenyの対象には、ホスト名やドメイン名、IPアドレスなどをさまざまな形式で指定できます(詳細は、http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#allowを参照してください)。

 Orderには、一般的に、「ごく一部を拒否してあとは許可する」ならDeny,Allowを、逆に「ごく一部は許可するけど、あとは拒否」ならAllow,Denyを指定します(詳細は、http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#orderを参照してください)。

 以下に例を示しておきます。

# 192.168.1.0のサブネットだけ拒否して、あとは許可
<Directory "/var/www/html/test1">
    Order Deny,Allow
    Deny from 192.168.1.0/24
    Allow from all
</Directory>
 
# atmarkit.co.jpのドメインだけ許可して、あとは拒否
<Directory "/var/www/html/test1">
    Order Allow,Deny
    Allow from atmarkit.co.jp
    Deny from all
</Directory>

 今回は、前回に引き続いて、Apacheの設定や機能のなかから、特に開発者にとって有用な機能を紹介しました。次回は、ApacheとWebアプリケーションの連携処理を、PHPを例に紹介したいと思います。

著者紹介

竹下 肯己

株式会社 qnote



前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。