Linux一覧

【Apache】バーチャルホストってなんだ?~1台のWEBサーバで複数ドメインのサイトを運用しよう

この記事では、次のことを解説しています。

  • バーチャルホストの基本的な説明
  • 実際に1台のWEBサーバで複数ドメインのサイトを運用するための設定方法

以下の記事では、より運用性を考慮したバーチャルホスト設定を例示しています。
ぜひごあわせてお読みください。

1台のWEBサーバで複数のWEBサイトを運用できるバーチャルホスト。将来的なドメインの追加・削除や設定の変更を考慮し、運用しやすい構築方法を解説します。SSL設定、www有り/無しの統一、HTTPからHTTPSへのリダイレクトにも対応。

複数のドメインでサイトを運用できるバーチャルホスト

バーチャルホストとは、1つのサーバで複数のドメインを運用する技術のことです。

通常、Webサーバを運用するには、ドメイン数と同じ台数のサーバコンピュータが必要となります。
たとえばhogehoge.comfugafuga.comの2つのドメインでサイトを運用したい場合、2台のWEBサーバを用意しなければなりません。
同様に、5個のドメインであれば5台、10個のドメインであれば10台のWEBサーバが必要になります。
安価なレンタルサーバなどを利用したとしても、コスト面でかなりのデメリットが発生してしまいます。

そんな課題を解決できるのがバーチャルホストという技術です。
バーチャルホストを利用することで、1つのサーバ上で複数ドメインを同時に運用することができるようになります。
サーバの数を減らすことができるほか、後述の名前ベースのバーチャルホストであればIPアドレスも一つで済むようになり、運用コストの削減に役立ちます。

また、ドメインを追加するたびにWEBサーバを構築する手間も省けますので、ドメインの追加が容易になり、拡張性という面でもメリットがあります。

バーチャルホストにはIPベースと名前ベースの2通りがある

バーチャルホストには、IPベース名前ベースという2種類の方式があります。
それぞれ特徴がありますので、導入前にどちらを採用するかを検討しておきましょう。

IPベースのバーチャルホスト

利用するドメインごとに個別のIPアドレスを設定するバーチャルホスト方式です。
したがって、一台のサーバコンピュータに複数のIPアドレスを割り当てる必要があります。

より厳密には、クライアントからのリクエストに対し、応答するバーチャルホストへのコネクションを決定するためにIPアドレスを使用する方式です。
このため、それぞれのドメインに個別のIPアドレスが必要になるのです。

メリット: クライアントのOS/ブラウザに依存しない
デメリット: ドメインごとにIPアドレスが必要

名前ベースのバーチャルホスト

利用するドメインすべてに同じIPアドレスを使用するバーチャルホスト方式です。
したがって、一台のサーバコンピュータに必要なIPアドレスは1つだけで済みます。

メリット: 複数のドメインで共通のIPアドレスを使用できる
デメリット: クライアントのOSがWindows XP以前の場合、IEやSafariでサイトを閲覧できない

名前ベースとIPベースのどちらを使うべきか?

特に理由がなければ、名前ベースのバーチャルホストを採用するべきでしょう。
IPアドレスをコストが削減されますし、WEBサーバでの設定方法も簡単です。
IPアドレス自体が限りあるインターネット資源ですので、名前ベースのバーチャルホストはIT環境にも優しいです。

非常に古いクライアント環境に対応しなければならない場合はIPベースを検討する必要がありますが、XP以前のOSでもChromeなどのブラウザならサイト閲覧できますので、IPベースでなければならないケースは非常に少ないといえます。

Apacheで名前ベースのバーチャルホストを設定する

例として、hogehoge.comfugafuga.comの2つのドメインを使い1台のサーバでサイト運営するとしましょう。
その場合、httpd.confに以下のような設定を追加するだけです。
※ DNSの設定はあらかじめドメインごとに行われている必要があります。

 
# 先頭のバーチャルホストはダミーの設定を行う(理由は後述)
<VirtualHost *:80>
  ServerName dummy  # 実際には使用しないダミーのサーバ名を指定する
  DocumentRoot /var/www/dummy
  Redirect 404 /
</VirtualHost>

# 2件目以降に正規のドメイン設定を行う
<VirtualHost *:80>
  ServerName hogehoge.com
  ServerAlias www.hogehoge.com
  DocumentRoot /var/www/hogehoge # hogehoge.comのドキュメントルート
</VirtualHost>

<VirtualHost *:80>
  ServerName fugafuga.com
  ServerAlias www.fugafuga.com
  DocumentRoot /var/www/fugafuga # fugafuga.comのドキュメントルート
</VirtualHost>

もちろん、ホストごとにドキュメントルートのディレクトリ設定やログファイル設定を行うことも可能です。
その場合、設定したいドメインのVirtualHostディレクティブ内に、通常の設定ファイルと同様に記述すればOKです。

<VirtualHost *:80>
  ServerName hogehoge.com
  ServerAlias www.hogehoge.com
  ServerAdmin admin@hogehoge.com
  DocumentRoot /var/www/hogehoge

  # ログファイル設定
  ErrorLog logs/ssl-error.hogehoge.com.log
  TransferLog logs/ssl-access.hogehoge.com.log
  CustomLog logs/ssl-request.hogehoge.com.log \
            "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

  # DocumentRootディレクトリ設定
  <Directory "/var/www/hogehoge">
    Options ExecCGI FollowSymLinks
    AllowOverride FileInfo AuthConfig Limit
    Require all granted
  </Directory>
    
</VirtualHost>

バーチャルホスト設定の注意点

先頭のバーチャルホスト設定はダミーにする

複数のバーチャルホスト設定を記述すると、最初に記述したバーチャルホストがデフォルトのバーチャルホストになります。
たとえば、IPアドレス直打ちでのアクセスが行われた場合、最初に記述されているバーチャルホストが使用されます。

したがって、先頭のバーチャルホスト設定をダミーにしておくことで、IPアドレスや意図しない逆引きアドレスからのアクセスをダミーホストに誘導することができます。
このようなアクセスはほとんどの場合、DNSリバインディングのような悪意のある攻撃であり、バーチャルホストの設定に関係なく行われるものです。

名前定義のバーチャルホスト設定を行い、先頭にダミーホストの設定を記述しておくことは、このようなアクセスに対する防御措置になります。

既に運用中のサイトをバーチャルホストにする場合は注意が必要

既にバーチャルホストを使わずに単一ドメインのWEBサーバを運用している場合は注意が必要です。
そのような場合、新たにドメインを追加するためにバーチャルホストの設定を行うには、既存のドメインに対してもバーチャルホストの設定を行わなければなりません。

既存のグローバルな設定を削除してVirtualHostディレクティブに移行するので、この際にミスがあると運用中のサイトに悪影響が発生する可能性があります。
既存の設定ファイルをバックアップしておき、問題が発生したらすぐに元の設定に戻せる状態で作業を行いましょう。

逆に、これから新たにWEBサーバを構築する場合は、最初はドメインが一つだけであっても、あらかじめバーチャルホストの設定で運用を始めることをお勧めします。

終わりに

以上、バーチャルホストの説明とApacheにおける基本的な設定方法の解説を行いました。
バーチャルホストはWEBサイトを運用するための基盤的な技術であり、利便性だけでなくセキュリティ面でも重要な役割を担います。
ぜひ理解を深めて活用できるようにしましょう。