一.定义
所谓虚拟主机是指在一台服务器里运行几个网站(如:<code>www.company1.com</code>和<code>www.company2.com</code>),提供WEB、FTP、Mail等服务。
二.虚拟主机的实现方法有三种:
基于IP的方法,基于主机名的方法 和 基于端口的方法。
①基于IP的方法:
在服务器里绑定多个IP,然后配置WEB服务器,把多个网站绑定在不同的IP上。访问不同的IP,就看到不同的网站。
②基于端口的方法:
一个IP地址,通过不同的端口实在不同网站的访问。
③基于主机名的方法:
设置多个域名的A记录,使它们解析到同一个IP地址上,即同一个服务器上。然后,在服务器上配置WEB服务端,添加多个网站,为每个网站设定一个主机名。因为HTTP协议访问请求里包含有主机名信息,当WEB服务器收到访问请求时,就可以根据不同的主机名来访问不同的网站。
三.三种虚拟主机实现的基本配置
①基于IP虚拟主机的实现:
多个ip,需要把中心主机取消
打开web服务的主配置文档:vim /etc/httpd/conf/httpd.conf
DocumentRoot 注释掉
配置虚拟主机:
<VirtualHost 192.168.0.20:80>
DocumentRoot "/www/a.com"
<VirtualHost/>
<VirtualHost 192.168.0.25:80>
DocumentRoot "/www/b.com"
vi /etc/hosts
浏览器中输入IP地址进行实验效果的验证。
②基于端口:
<VirtualHost 192.168.0.20:8080>
③基于主机名:
开启:NameVirtualHost 192.168.0.20:80
<VirtualHost *:80>
DocumentRoot /etc/httpd/aaa/a.com
ServerName dummy-host.example.com
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
DocumentRoot /etc/httpd/aaa/b.com
基于域名(主机名)的虚拟主机相对比较简单,因为你只需要配置你的DNS服务器将每个主机名映射到正确的IP地址,然后配置Apache HTTP服务器,令其辨识不同的主机名就可以了。基于域名的服务器也可以缓解IP地址不足的问题。所以,如果没有特殊原因使你必须使用基于IP的虚拟主机,您最好还是使用基于域名的虚拟主机。下列情况下,你可能会想要使用基于IP的虚拟主机:
一些古董级的客户端与基于域名的虚拟主机不兼容。为了与基于域名的虚拟主机兼容,客户端必须发送"Host"头。HTTP/1.1规范中对此做了要求。而所有现在常见的仅支持HTTP/1.0的旧版本浏览器都以附加的方式实现了这个要求。如果你又想支持这些老浏览器,又想使用基于域名的虚拟主机。我们提供了一个技术方案,你可以在本文末尾看到它。
SSL协议先天特性决定了基于域名的虚拟主机无法成为SSL安全服务器。
一些操作系统和网络设备实现的带宽管理技术无法在多个主机共享一个IP的情况下区别它们。
四.基于域名虚拟主机案例综合实现
相关模块
相关指令
比如说,假设你正在为域名<code>www.domain.tld</code>提供服务,而你又想在同一个IP地址上增加一个名叫<code>www.otherdomain.tld</code>的虚拟主机,你只需在<code>httpd.conf</code>中加入以下内容:
<code>NameVirtualHost *:80 ————现在版本,这个参数已经废弃。 <VirtualHost *:80> ServerName www.domain.tld ServerAlias domain.tld *.domain.tld DocumentRoot /www/domain </VirtualHost> <VirtualHost *:80> ServerName www.otherdomain.tld DocumentRoot /www/otherdomain </VirtualHost></code>
<code>ServerAlias domain.tld *.domain.tld</code>
下面练习题:
建立http服务器,要求:
1)提供两个基于名称的虚拟主机:
(a)www1.ilinux.org,页面文件目录为/var/www/html/www1;错误日志 为/var/log/httpd/www1.err,访问日志为/var/log/httpd/www1.access;
(b)www2.ilinux.org,页面文件目录为/var/www/html/www2;错误日志为/var/log/httpd/www2.err,访问日志为/var/log/httpd/www2.access;
(c)为两个虚拟主机建立各自的主页文件index.html,内容分别为其对应的主机名;
2)www1主机仅允许192.168.0.0/24网络中的客户机访问;www2主机可以被所有主机访问;
为http服务提供第3个虚拟主机,要求:
1)www3.ilinux.org,页面文件目录为/var/www/html/www3;错误日志为/var/log/httpd/www3.err,访问日志为/var/log/httpd/www3.access;
2)为此虚拟主机提供基本认证功能,并为其提供两个虚拟用户webuser1和webuser2,
密码均为redhat,要求允许此两用户在提供密码的情况下访问此站点;
配置过程如下:
①安装web服务:yum -y install httpd
②进入主配置文档vim /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html/www1" ——DocumentRoot定义这个服务器对外发布的超文本文档存放的路径,
——客户程序请求的UR L就被映射为这个目录下的网页文件。
ServerName www1.ilinux.org ——这个就是客户在浏览器里输入的网址
Errorlog /var/log/httpd/www1.err ——错误日志位置
CustomLog /var/log/httpd/www1.access common
<Directory "/var/www/html/www1">
Options Indexes ——参考文档:http://blog.csdn.net/cymm_liu/article/details/7899049
AllowOverride None
Order allow,deny
Allow from 192.168.0.0/24 ——www1主机仅允许192.168.0.0/24网络中的客户机访问
</Directory>
DocumentRoot "/var/www/html/www2"
ServerName www2.ilinux.org
Errorlog /var/log/httpd/www2.err
CustomLog /var/log/httpd/www2.access common
<Directory "/var/www/html/www2">
Options Indexes
AllowOverride None
Order allow,deny
Allow from all ——这个就是允许所有的ip来访问,如果设置成Deny from all,网页就是显403禁止访问。
</Directory>
DocumentRoot /var/www/html/www3
ServerName www3.ilinux.org
ErrorLog /var/log/httpd/www3.err
CustomLog /var/log/httpd/www3.access combined
<Directory "/var/www/html/www3">
AllowOverride AuthConfig
AuthName "AuthConfig.."
AuthType basic
AuthUserFile /etc/httpd/.htpasswd
require user webuser1 webuser2
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
htpasswd -cm /etc/httpd/.htpasswd webuser1
htpasswd -m /etc/httpd/.htpasswd webuser2
③分别在/var/www/html目录下创建www1,www2,www3目录
vim /var/www/html/www1/index.html
This is www1 test!
vim /var/www/html/www2/index.html
This is www2 test!
vim /var/www/html/www3/index.html
This is www3 test!
④service httpd start 启动web服务
⑤进行实验效果的验证:浏览器中分别输入www1.ilinux.org www2.ilinux.org www3.ilinux.org