バーチャルホスト (Virtual Hosts) とは `仮想の (客をもてなす) 主人' というような意味合いとなるが、Apache の提供する優れた機能の一つである。サーバーは 1 台しかないのだが、外から見るとまるで複数のサーバーが存在するように見えることからこの様に呼ばれる。例えばあるクライアントから `http://www.foo.com' と `http://www.bar.com' にリクエストし、コンテンツがそれぞれ違えば当然別々のサーバーかの様に見える。しかしこれは 1 台の Apache サーバーで実現できるのである。具体的にバーチャルホストを実現するためには 2 つの方法がある。IP アドレスにより区別し実現する IP 根拠のバーチャルホストと、URI のホスト名により区別し実現する 名前根拠のバーチャルホストである。
IP 根拠のバーチャルホスト (IP-based Virtual Hosts) とはその名のとおり、リクエストを受ける IP アドレスによりコンテンツを切り替える方法を採る。現実のホストが xxx.xxx.xxx.xxx という IP アドレスと、yyy.yyy.yyy.yyy という IP アドレスを持つ時、Apache は 2 つのアドレスに対しリクエストを待ち受ける。また Apache は 2 つのドキュメントルートを持ち、例えばそれぞれ /var/www/XXX と /var/www/YYY とする。この時クライアントが xxx.xxx.xxx.xxx にリクエストしてきた場合、/var/www/XXX のドキュメントルートからコンテンツを返し、yyy.yyy.yyy.yyy にリクエストしてきた場合には、/var/www/YYY のドキュメントルートからコンテンツを返す。

この方法の欠点はバーチャルホストの数だけ IP アドレスを必要とすることで、多くの IP アドレスを確保できない場合、有効な方法ではない。httpd.conf への設定は以下の様になる。
Listen xxx.xxx.xxx.xxx:80
Listen yyy.yyy.yyy.yyy:80
<VirtualHost xxx.xxx.xxx.xxx:80>
DocumentRoot /var/www/XXX
</VirtualHost>
<VirtualHost yyy.yyy.yyy.yyy:80>
DocumentRoot /var/www/YYY
</VirtualHost>
Listen ディレクティブで 2 つの IP アドレスでの待ち受けを指定し、VirtualHost ディレクティブで それぞれの IP アドレスに別々のドキュメントルートを割り当てている。
名前根拠のバーチャルホスト (Name-based Virtual Hosts) とは HTTP リクエストに含まれる URI のホスト名を区別し、コンテンツを切り替える方法を採る。Apache は 2 つのドキュメントルートを持ち、例えばそれぞれ /var/www/XXX と /var/www/YYY とする。http://www.foo.com/ でリクエストされた場合、/var/www/XXX のドキュメントルートからコンテンツを返し、http://www.bar.com/ でリクエストされた場合、/var/www/YYY のドキュメントルートからコンテンツを返す。IP アドレスによる区別をしていないため、例え実際のホストが IP アドレスを 1 つしか持っていなくてもバーチャルホストを実現できる。ただし 複数のホスト名が同じ実在のホストを示さなければならないため、DNS との連携が必要となる。この例の場合、実際のホストが zzz.zzz.zzz.zzz という IP アドレスを 1 つだけ持っているとすると、www.foo.com と www.bar.com が共に zzz.zzz.zzz.zzz に解決されなければならない。

この方法の欠点はバーチャルホストの数だけホスト名を必要とすることで、DNS などによりホスト名の解決を制御出来ない場合、有効な方法ではない。httpd.conf への設定は以下の様になる。
Listen zzz.zzz.zzz.zzz:80
NameVirtualHost zzz.zzz.zzz.zzz:80
<VirtualHost zzz.zzz.zzz.zzz:80>
ServerName www.foo.com
DocumentRoot /var/www/XXX
</VirtualHost>
<VirtualHost zzz.zzz.zzz.zzz:80>
ServerName www.bar.com
DocumentRoot /var/www/YYY
</VirtualHost>
NameVirtualHost ディレクティブでホスト名による区別を行う IP アドレスを指定し、VirtualHost ディレクティブ中の ServerName ディレクティブでそのホスト名を指定する。またそれぞれのホスト名に別々のドキュメントルートを割り当てている。
バーチャルホストにはこの他にIP 根拠のバーチャルホストの応用として TCP ポートによる区別を行うこともできる。また IP 根拠、名前根拠によるバーチャルホストを併用することもできる。