バーチャルホストとは
バーチャルホストは、一台のWebサーバーで、ホスト名などに応じて複数サイトを分けて公開する設定です。英語ではvirtual host(バーチャル・ホスト)と表します。
一つのIPアドレスへ複数ドメインを向けても、HTTPのHostヘッダーやTLSのSNIを手掛かりに、別々の文書ルート、証明書、ログ、アクセス方針を選べます。
DNSは利用者をサーバーのアドレスまで案内します。到着した要求をどのサイト設定で処理するかはWebサーバーが決めます。

選択方法は三種類ある
同じIP・ポートに複数サイトを置き、HTTP HostとTLS SNIから設定を選ぶ。現在の一般的な方式。
サイトごとに異なるIPアドレスを割り当て、接続が到着したアドレスから設定を選ぶ。
同じアドレスでも80、443、8080などポートを変える。URLに標準外ポートの明示が必要になる場合がある。
HTTPSではSNIが先、Hostが後
HTTPSではHTTP要求を読む前にTLSハンドシェイクを行います。クライアントはSNI(Server Name Indication/サーバー・ネーム・インディケーション)で接続したいホスト名を伝え、サーバーは証明書とTLS設定を選びます。
暗号化後にHTTPのHostヘッダーを読み、仮想ホストを選びます。SNIとHostが食い違う要求をどう扱うか、サーバーと逆プロキシの規則を決めます。証明書のSANにホスト名が含まれなければ警告になります。
各サイトの境界を設定へ反映する
仮想ホストごとにServerName、別名、文書ルート、索引、エラーページ、アクセスログ、エラーログ、TLS証明書、リダイレクト、セキュリティヘッダーを設定できます。
ログを一つへ混ぜる場合もホスト名を必ず記録します。障害調査で「どのサーバー」だけでなく「どの仮想ホスト」が応答したかを追えるようにします。
既定ホストは拒否用にできる
要求のホスト名がどの設定にも一致しない場合、多くのサーバーは最初または既定のサーバーブロックを使います。そこへ本番サイトを置くと、未知のHostでも内容を返し、意図しないドメインから閲覧されることがあります。
既定は短いエラー応答だけを返す設定にし、許可したホスト名を列挙します。HostヘッダーをパスワードリセットURLやキャッシュ鍵へ使うアプリケーションでも、信頼するホストを検証します。
DNS設定だけではサイトは増えない
新しいサブドメインのA・AAAAやCNAMEを同じサーバーへ向けても、Webサーバーに仮想ホスト設定、文書ルート、証明書がなければ既定サイトやエラーになります。反対に仮想ホストだけ作っても、DNSから到達できません。
DNS、サーバー待受、ファイアウォール、仮想ホスト、証明書、公開ファイルを一連として確認します。IPv4とIPv6で別サーバーへ到着する場合は、両方へ同じ設定が必要です。
ローカル試験は名前を保ったまま行う
ホストファイルで試験用ホスト名を検証サーバーのIPへ一時対応させれば、公開DNSを変えずにHostとSNIを含めて確認できます。単にIPアドレスをブラウザーへ入力すると、IPをHostとして既定サイトが選ばれます。
HTTPSでは試験ホスト名に合う証明書も必要です。証明書警告を無視した試験結果を本番の正常性としません。
仮想ホストは仮想システムではない
仮想ホストはWebサーバー内のサイト選択です。処理、OS、CPU、メモリーを完全に隔離するVPSやコンテナーとは異なります。一つのWebサーバー処理の障害や設定誤りが複数サイトへ影響し得ます。
「別ドメインだから別サーバー」とは限りません。DNSで同じアドレスへ届き、同じWebサーバーがホスト名ごとに別の公開設定を選ぶのがname-based仮想ホストです。
virtual host選択の確認資料:Apache HTTP Server「VirtualHost Examples」、nginx「How nginx processes a request」