我们通常所说的虚拟主机技术就是将一台(或者一组)服务器的资源(系统资源、网络带宽、存储空间等)按照一定的比例分割成若干台相对独立的“小主机”的技术。每一台这样的“小主机”在功能上都可以实现WWW、FTP、Mail等基本的Internet服务,就像使用独立的主机一样。
目前网站服务器的虚拟主机平台使用以开放的Apache为最多,其次是微软的Windows IIS。Apache具有跨平台(FreeBSD/Linux/Windows/Solaris/Other UNIX)、易于维护与最佳安全性等优点。
Apache是率先支持基于IP虚拟主机的服务器之一。 Apache 1.1及其更新版本同时支持基于IP和基于主机名的虚拟主机,不同的虚拟主机有时会被称为基于主机(host-based) 或非IP虚拟主机(non-IP virtual hosts)。
用Apache设置虚拟主机服务通常可以采用两种方案:基于IP地址的虚拟主机和基于主机名字的虚拟主机,下面我们分别介绍一下它们的实现方法以及优缺点。以便大家在具体的应用中能够选择最合适的实现方法。
一、Apache实现基于IP地址的虚拟主机(每个站点拥有一个独立IP地址)
使用这种虚拟主机方式,首先要在服务器上为每个虚拟主机单独设置一个IP地址。这些IP地址可以通过增加多个网卡或者在一个网卡上设立多个IP地址来完成。有了多个IP地址后,可以采用以下两种方式之一来设置Apache。
1、为每个虚拟主机运行一份Apache
采用这种方式,每一份Apache程序可以以单独的用户运行,因此各个虚拟主机之间互不影响。设置这种虚拟主机时,只要为每一份Apache设置一套配置文件就可以了,唯一需要注意的是:必须使用“Listen”语句,强制每一份Apache 仅仅在属于“自己”的IP地址上接收服务请求。
优点:各个虚拟主机之间互不干扰,安全性高。
缺点:占用系统资源较多。
2、多个虚拟主机共享同一份Apache
采用这种方式,各个虚拟主机共享同一份Apache,因此各个虚拟主机之间有一定的影响,尤其是执行CGI程序时,可能会带来一些严重的安全问题。设置这种虚拟主机时,只要为每一个虚拟主机设置类似如下的信息即可:
DocumentRoot /www/ghq1
…
优点:占用系统资源比上一种方式少。
缺点:安全性低,每个虚拟主机仍然需要占用一个IP地址。
例如服务器一个网卡上绑定有两个IP地址(172.16.3.40和 172.16.3.50)分别对应域名 www.ghq1.com和www.ghq2.org的服务,配置如下:
服务器配置(apache的配置文件httpd.conf)
Listen 80
DocumentRoot /www/ghq1
ServerName www.ghq1.com
DocumentRoot /www/ghq2
ServerName www.ghq2.org
配置简单说明:“Listen”默认httpd服务会监控第80号通信端口, “Listen”选项让用户自行指定apache 服务器监控的IP地址或通信端口。
“DocumentRoot”:指定apache 服务器存放网页的根目录;“ServerName”:允许用户自行设置主机名,这个名称将被送到远程连接程序,以取代安装apache 服务器主机的真实名称。
如果服务器有两个IP地址(172.16.3.40和 172.16.3.50)分别对应域名 www.ghq1.com和www.ghq2.org。对每个域名,我们都希望在80端口和8080端口发布我们的网站。可以这样配置:
サーバー設定 (Apache 設定ファイル httpd.conf)
リッスン 172.16.3.40:80
リッスン 172.16.3.40:8080
リッスン 172.16.3.50:80
リッスン 172.16.3.50:8080
DocumentRoot /www/ghq1-80
ServerName www.ghq1.com
DocumentRoot /www/ghq1-8080
ServerName www.ghq1.com
DocumentRoot /www/ghq2-80
ServerName www.ghq1.org
DocumentRoot /www/ghq2-8080
ServerName www.ghq2.org
したがって、仮想ホストを確立するには、異なる IP に対応するドメイン名解決作業を行い、対応するディレクトリ (/www/ghq1 など) を確立し、対応するホームページのコンテンツを対応するディレクトリに保存する必要があります。
2. Apache はホスト名に基づいて仮想ホスト サービスを実装します (1 つの IP アドレスで複数の Web サイトを実装します)
ホスト名に基づいた仮想ホスト サービスは、現在仮想ホストに対して一般的に使用されているソリューションです。それは、追加の IP アドレスを必要とせず、特別なソフトウェアやハードウェアのサポートを必要としないためです。そして、今日のブラウザーのほとんどは、この仮想ホストの実装方法をサポートしています。ドメイン名ベースの仮想ホストは、クライアントによって送信された HTTP ヘッダーのホスト名部分に基づいて決定されます。このテクノロジーを使用すると、多くの仮想ホストが同じ IP アドレスを共有できます。
ドメイン名ベースの仮想ホスティングは、各ホスト名 (CNAMES) を正しい IP アドレスにマップするように DNS サーバーを構成し、その後、異なるホスト名を認識するように Apache HTTP サーバーを構成するだけなので、比較的簡単です。ドメイン名ベースのサーバーは、IP アドレス不足の問題も軽減できます (IPV4)。このように、各仮想ホストは同じ Apache を共有するため、CGI プログラムが実行されている場合、セキュリティは高くありません。
利点: 1 つの IP アドレスだけで多数の仮想ホスト サービスを提供できます。
欠点: セキュリティが不十分です。これらの仮想ホストを維持するには構成ファイルの変更が必要であり、Apache プロセスが機能するには再起動する必要があります。したがって、大規模な仮想ホスティング サービスには適していません。
サーバーに IP アドレスが 1 つしかなく、DNS でこのマシンに多数の IP アドレスがマッピングされている場合。このマシン上で 2 つのサイト www.ghq1.com と www.ghq2.org を実行したいと考えています。 Apache サーバー構成で仮想ホストを作成しても、それに応じて DNS のホスト名は自動的に更新されません。 IP アドレスを指すように、DNS にドメイン名を自分で追加する必要があります。そうしないと、他の人は当社の Web サイトを見ることができなくなります。
サーバー設定 (Apache 設定ファイル httpd.conf)
# Apache がポート 80 でリッスンすることを確認します
Listen 80
# すべての IP アドレスで仮想ホストのリクエストをリッスンします
NameVirtualHost *
DocumentRoot /www/ghq1
サーバー名 www.ghq1.com
# その他のディレクティブはこちら
DocumentRoot /www/ghq2
ServerName www.ghq2.org
# その他のディレクティブはこちら
仮想ホスト>
* (アスタリスク) はすべてのアドレスに一致するため、メインサーバーはリクエストを受け付けません。 www.ghq1.com は設定ファイルの最初に現れるため、優先順位が最も高く、デフォルトまたはプライマリ サーバーと見なすことができます。これは、受け入れられたリクエストが ServerName ディレクティブと一致しない場合、そのリクエストは最初の VirtualHost によって処理されることを意味します。IP アドレスが特定できない場合、* を使用すると非常に便利です。たとえば、ISP が動的 IP アドレス (ADSL ダイヤルアップ インターネット アクセスなど) を設定し、ある種の動的ドメイン名を使用する場合です。解像度システム。 * は任意の IP アドレスに一致するため、この場合、IP アドレスがどのように変化しても、個別に設定する必要はありません。上記の構成では、ほとんどの場合、ドメイン名ベースの仮想ホストを使用します