Apache設定編④ バーチャルホストの設定(前編) Linuxサーバ構築手順まとめ
今回と次回の2回に渡って、バーチャルホストの設定をしていきましょう。
バーチャルホストとは、1つのウェブサーバに複数サイトを構築する時によく使う、文字通り仮想的に複数のホスト(ウェブサーバ)が動いているように見せるApacheの機能です。
Apacheの機能の中でも筆頭に挙がってくるようなよくある機能ですので、しっかり理解しておきましょう。
バーチャルホストとは
バーチャルホストは、1つのウェブサーバが別々のホスト(サーバ)上で動作しているように、リクエストを振り分けることができる機能です。
例えば「http://www.test1.com」と「http://www.test2.com」という2つのURLをブラウザで見たときに、どちらもWebサーバTESTにアクセスをするけれども、見れるページは別(ドキュメントルートが別)、というような状況を作り出すことができるわけです。
バーチャルホストができると何がよいのか。それは、わざわざ複数サーバを作り、各々にApacheをインストールしてWebサーバを構築する、という手間が一気に省くことができるという点です。複数のWeb環境が必要な場合というのはよくあることで、したがってこのバーチャルホストというのは良く利用されていると言えるでしょう。
バーチャルホストの振り分けを行うためには、どのバーチャルホストに対するリクエストなのかを、Apacheが判断できなければなりません。何を判断材料にするかというと、主に以下の3つが挙げられます。
・ポート番号
・ドメイン
・IPアドレス
今回はまず、ポート番号によるバーチャルホストの設定振り分け方法を見ていきましょう。
ポート番号指定によるバーチャルホスト設定
まずは大枠の流れを押さえましょう。
1.httpd.confの設定編集
2.iptablesの設定
3.Apacheの再起動
4.バーチャルホストの設定確認
次に、個別に内容を見ていきます。
1.httpd.confの設定編集
今回はひとまず2つのバーチャルホストを構築することにします。
httpd.confを開き、以下の内容を追記しましょう。
<VirtualHost *:80> ServerAdmin webmaster@virtual1.com DocumentRoot /var/www/html/virtual1 ServerName virtual1.com ErrorLog logs/virtual1.com-error_log CustomLog logs/virtual1.com-access_log common </VirtualHost> <VirtualHost *:8080> ServerAdmin webmaster@virtual2.com DocumentRoot /var/www/html/virtual2 ServerName virtual2.com ErrorLog logs/virtual2.com-error_log CustomLog logs/virtual2.com-access_log common </VirtualHost>
VirtualHostディレクティブが2つ記述されていることがわかります。
各々の「DocumentRoot」の欄を見てみましょう。
「/var/www/html/virtual1」
「/var/www/html/virtual2」
の別々のディレクトリが指定されていることがわかります。
他の項目も分かりやすく「virtual1」「virtual2」としていますが、
実際に使う際は、名前は自由に設定して構いません。
次に、VirtualHostディレクティブの記述を見てみましょう。
<VirtualHost *:80> ~省略~ <VirtualHost *:8080>
このようにVirtualHost側で80番ポートにリクエストが来た場合は1つ目の設定を、
8080番ポートに来た場合は2つ目の設定を見るように指定しているのです。
これで振り分けが行えるようになりましたが、もう一つhttpd.confで確認しておかなければならない点があります。Listenディレクティブの設定です。
httpd.confの上の方「Listen」ディレクティブを確認しましょう。
Listen 80
と記述があります。
これは80番ポートへのアクセスがあった場合に、Apacheで処理する、という設定です。
上記のVirtualHostの設定より、8080番ポートもApacheで処理しますので、以下のように一行追記します。
Listen 80 Listen 8080
このポート番号は8080でなくても構いませんが、VirtualHostディレクティブと合わせる必要がありますので、注意しておきましょう。
2.iptablesの設定
iptablesというのは、Webサーバに限らず、Linuxコンピュータへのアクセスが来た際のアクセス制限を指定できるLinuxのファイアウォール機能のことです。
iptablesはポート指定でアクセスの許可/拒否を決めておきますので、ここで8080番ポート(80番ポートもですが)が閉じられていると、アクセスがApacheまで到達しません。
そこで、以下のように8080番ポートを許可するようにiptablesの設定を追記してあげます。(iptablesが起動していない場合や、既に記述の有る場合は不要です)
# cp /etc/sysconfig/iptables /etc/sysconfig/iptables_bk # vi /etc/sysconfig/iptables
以下の記述を追記します。
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
設定が完了したら、iptablesを再起動します。
# service iptables restart
3.Apacheの再起動
Apacheを再起動し、編集後のhttpd.confを有効にします。
# service httpd restart
4.バーチャルホストの設定確認
それでは設定確認をしましょう。
まず、それぞれのドキュメントルートにサンプルページを作成します。
# cd /var/www/html # mkdir virtual1 # mkdir virtual2 # vi virtual1/test.html # vi virtual2/test.html
virtual1とvirtual2ディレクトリ配下のtest.htmlには、どちらのページか分かるような内容を記述しておきましょう。
それでは、
http://【サーバのIPアドレスまたはドメイン】:80/test.html
http://【サーバのIPアドレスまたはドメイン】:8080/test.html
にアクセスしてみましょう。
上記で作成したそれぞれのサンプルページが表示されれば確認完了です。
補足
Webサーバへのリクエストは基本80番ポートです。ですので、ブラウザでアクセスするときはポートを指定しなくとも、80番ポートにリクエストを飛ばします(つまり、上記の1つ目のURLでは、「:80」の記述がなくても構いません)。
一方新たに追加したポート番号というのは何番にするのかは設定者しかわかりません。また、あまりポートを不必要にオープンすることは望ましくない為、一般的なWebサーバに使われることはあまりありません。ただ、ポート指定のバーチャルホストは設定内容的には比較的少なく簡単にできますので、開発環境や、バーチャルホストの概念を理解する上では有効な設定と言えるでしょう。