では、仮想ホストの設定をします。設定はhttpd.confに直接記述してもよいのですが、より管理しやすくするために別の設定ファイルに分割してみましょう。
Apacheの設定ファイルの本体であるhttpd.confに「Include 別の設定ファイル名」と記述することで、分割設定ファイルが読み込まれます。
例えば、RPMからApacheをインストールした場合、httpd.confに「Include conf.d/*.conf」という記述があるため、/etc/httpd/conf.dの下にある拡張子が「.conf」の設定ファイルはすべて読み込まれます。
Apacheをソースからインストールした場合は、インストール先/conf/extraというディレクトリに、分割設定ファイルが設置してあります。httpd.confを見ると、これらの分割設定ファイルをIncludeする行はコメント化されていますので、読み込ませたい場合はこれらのInclude設定を有効にします。
今回は、RPMの環境で、/etc/httpd/conf.dの下に「vhosts.conf」という設定ファイルを作成し、そこに設定を記述してみます。
NameVirtualHost *:80 # vhost1 <VirtualHost *:80> ServerName vhost1 DocumentRoot /usr/local/vhosts/vhost1 ServerAdmin root@cent53 <Directory "/usr/local/vhosts/vhost1"> Options All AllowOverride All Order Allow,Deny Allow from all </Directory> </VirtualHost> # vhost2 <VirtualHost *:80> ServerName vhost2 DocumentRoot /usr/local/vhosts/vhost2 ServerAdmin root@cent53 <Directory "/usr/local/vhosts/vhost2"> Options All AllowOverride All Order Allow,Deny Allow from all </Directory> </VirtualHost>
上記の設定ファイルを設置したら、それぞれのドキュメントルートにトップページ(index.html)を設置しておきます。どちらを参照しているかが分かるように、異なる内容のHTMLを設置してください。
準備が完了したら、Apacheを再起動します。Webブラウザから、それぞれ「http://vhost1/」と「http://vhost2/」というURLでアクセスしてみましょう。ホスト名によって、違うドキュメントルートのページが表示されるはずです。
さて、先ほどの仮想ホストの設定を整理しておきましょう。まず下記の記述ですが、
NameVirtualHost *:80
これは「名前ベースの仮想ホストを使用しますよ」という宣言です。「*:80」はサーバのIPアドレスとポート番号で、*はすべてを表します。
各仮想ホストの設定は、それぞれ<VirtualHost IPアドレス:ポート番号> 〜 </VirtualHost>のなかに記述します。
<VirtualHost IPアドレス:ポート番号> ServerName 仮想ホスト名 DocumentRoot ドキュメントルートのパス ServerAdmin 管理者のメールアドレス # 必要ならここにディレクトリ固有の設定を記述 <Directory "ドキュメントルートのパスなど"> Options All AllowOverride All Order Allow,Deny Allow from all </Directory> </VirtualHost>
「IPアドレス:ポート番号」の部分は、先ほどのNameVirtualHostの設定と同じです。通常は「*:80」としておけばよいでしょう。
ServerNameは、文字どおり、ここで設定したい仮想ホスト名です。今回の例ではvhost1やvhost2を指定します。
DocumentRootには、この仮想ホスト名でアクセスされた場合のドキュメントルートのパスを指定します。今回の例では、/usr/local/vhosts/vhost1(あるいはvhost2)を指定しています。
ServerAdminには、管理者のメールアドレスを指定します。
続く、<Directory "ディレクトリパス"> 〜 </Directory>の部分ですが、これは仮想ホストの設定に限らず、Apacheの設定をディレクトリごとに上書きするための記述ブロックです。今回の例では、仮想ホストごとのドキュメントルートに固有の設定をするために利用しています。
仮想ホストの話からは少し脱線してしまいますが、先ほど<Directory "ディレクトリパス"> 〜 </Directory>のなかに記述した設定について、いくつか説明しておきます。
Optionsは、Apacheのオプション機能のうち、どれを有効にするかを指定するものです。指定できるのは、CGIの実行を許可するExecCGIや、シンボリックリンク経由でコンテンツにアクセスできるようにするFollowSymLinks、ほぼすべてのオプションを有効にするAll、すべて無効にするNoneなど、いくつかあります(詳細は、http://httpd.apache.org/docs/2.2/mod/core.html#optionsを参照してください)。
デフォルトのhttpd.confを見てみると、<Directory /> 〜 </Directory>というブロックのなかに「Options FollowSymLinks」という記述があり、ルートディレクトリ配下(つまり、あらゆるディレクトリ)で、シンボリックリンクのオプションが有効になっていることが分かります。
このようなデフォルト設定を上書きしたいときに、個々のディレクトリに対して<Directory "ディレクトリパス"> 〜 </Directory"を記述します。
<Directory "ディレクトリパス"> 〜 </Directory>内でOptionsを設定すると、許可も禁止も含めすべて上書きされます。つまり、上の階層のディレクトリで「Options All」となっていても、下の階層で「Options FollowSymLinks」と指定すれば、そこではシンボリックリンクのオプションのみが有効になります。
上の階層の設定を引き継ぎつつ、オプション機能を付加したり削除したりしたい場合には、+や-を付けて記述します。
以下に、ディレクトリ階層を下りながら設定を上書きしていく例を示します。
# すべてのオプションが無効 <Directory /> Options None </Directory> # シンボリックリンクのオプションのみ有効 <Directory "/var/www/html"> Options FollowSymLinks </Directory> # シンボリックリンクのオプションに加えて、CGI実行のオプションが有効 <Directory "/var/www/html/test1"> Options +ExecCGI </Directory> # ディレクトリ内の一覧表示オプションのみ有効 <Directory "/var/www/html/test2"> Options Indexes </Directory>
Copyright © ITmedia, Inc. All Rights Reserved.