一.定义

所谓虚拟主机是指在一台服务器里运行几个网站(如:www.company1.comwww.company2.com),提供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"
ServerName  www.a.com
<VirtualHost/>
<VirtualHost 192.168.0.25:80>
DocumentRoot "/www/b.com"
ServerName  www.b.com
<VirtualHost/>

vi /etc/hosts

192.168.0.20  www.a.com

192.168.0.25 www.b.com

浏览器中输入IP地址进行实验效果的验证。

②基于端口:
<VirtualHost 192.168.0.20:80>
DocumentRoot "/www/a.com"
ServerName  www.a.com
<VirtualHost/>
<VirtualHost 192.168.0.20:8080>
DocumentRoot "/www/b.com"
ServerName  www.b.com
<VirtualHost/>

③基于主机名:
开启:NameVirtualHost 192.168.0.20:80
<VirtualHost *:80>
    ServerAdmin    www.a.com
    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>

<VirtualHost *:80>
    ServerAdmin    www.b.com
    DocumentRoot /etc/httpd/aaa/b.com
</VirtualHost>

基于域名(主机名)的虚拟主机相对比较简单,因为你只需要配置你的DNS服务器将每个主机名映射到正确的IP地址,然后配置Apache HTTP服务器,令其辨识不同的主机名就可以了。基于域名的服务器也可以缓解IP地址不足的问题。所以,如果没有特殊原因使你必须使用基于IP的虚拟主机,您最好还是使用基于域名的虚拟主机。下列情况下,你可能会想要使用基于IP的虚拟主机:

  • 一些古董级的客户端与基于域名的虚拟主机不兼容。为了与基于域名的虚拟主机兼容,客户端必须发送"Host"头。HTTP/1.1规范中对此做了要求。而所有现在常见的仅支持HTTP/1.0的旧版本浏览器都以附加的方式实现了这个要求。如果你又想支持这些老浏览器,又想使用基于域名的虚拟主机。我们提供了一个技术方案,你可以在本文末尾看到它。
  • SSL协议先天特性决定了基于域名的虚拟主机无法成为SSL安全服务器。
  • 一些操作系统和网络设备实现的带宽管理技术无法在多个主机共享一个IP的情况下区别它们。

四.基于域名虚拟主机案例综合实现

相关模块 相关指令
  • core
  • DocumentRoot
  • NameVirtualHost
  • ServerAlias
  • ServerName
  • ServerPath
  • <VirtualHost>

为了使用基于域名的虚拟主机,你必须指定服务器IP地址(和可能的端口)来使主机接受请求,这个可以用NameVirtualHost指令来进行配置。如果服务器上所有的IP地址都会用到,你可以用"*"作为NameVirtualHost的参数。如果你打算使用多端口(如运行SSL)你必须在参数中指定一个端口号,比如"*:80"。请注意,在NameVirtualHost指令中指定IP地址并不会使服务器自动侦听那个IP地址。请参阅设置Apache使用的地址和端口一章获取更多详情。另外,这里设定的IP地址必须对应服务器上的一个网络接口。

下一步就是为每个虚拟主机建立<VirtualHost>段。<VirtualHost>的参数与NameVirtualHost的参数必须是一样的(比如说,一个IP地址或"*"代表的所有地址)。在每个<VirtualHost>段中,至少要有一个ServerName指令来指定伺服哪个主机和一个DocumentRoot指令来说明这个主机的内容位于文件系统的什么地方。

取消中心主机(Mainhost)

如果你想在现有的web服务器上增加虚拟主机,你必须也为现存的主机建造一个<VirtualHost>定义块。这个虚拟主机中ServerNameDocumentRoot所包含的内容应该与全局的ServerNameDocumentRoot保持一致。还要把这个虚拟主机放在配置文件的最前面,来让它扮演默认主机的角色。

比如说,假设你正在为域名www.domain.tld提供服务,而你又想在同一个IP地址上增加一个名叫www.otherdomain.tld的虚拟主机,你只需在httpd.conf中加入以下内容:

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>

当然,你可以用一个固定的IP地址来代替NameVirtualHost<VirtualHost>指令中的"*"号,以达到一些特定的目的。比如说,你可能会希望在一个IP地址上运行一个基于域名的虚拟主机,而在另外一个IP地址上运行一个基于IP的或是另外一套基于域名的虚拟主机。

很多服务器希望自己能通过不只一个域名被访问。我们可以把ServerAlias指令放入<VirtualHost>小节中来解决这个问题。比如说在上面的第一个<VirtualHost>配置段中ServerAlias指令中列出的名字就是用户可以用来访问同一个web站点的其它名字:

ServerAlias domain.tld *.domain.tld

这样,所有对域domain.tld的访问请求都将由虚拟主机www.domain.tld处理。通配符标记"*"和"?"可以用于域名的匹配。当然你不能仅仅搞个名字然后把它放到ServerNameServerAlias里就算完了。你必须先在你的DNS服务器上进行配置,将这些名字和您服务器上的一个IP地址建立映射关系。

最后,你可以把其他一些指令放入<VirtualHost>段中,以更好的配置一个虚拟主机。大部分指令都可以放入这些<VirtualHost>段中以改变相应虚拟主机配置。如果您想了解一个特定的指令是否可以这样运用,请参见指令的作用域。主服务器(main server)范围内的配置指令(在所有<VirtualHost>配置段之外的指令)仅在它们没有被虚拟主机的配置覆盖时才起作用。

这样,当一个请求到达的时候,服务器会首先检查它是否使用了一个能和NameVirtualHost相匹配的IP地址。如果能够匹配,它就会查找每个与这个IP地址相对应的<VirtualHost>段,并尝试找出一个与请求的主机名相同的ServerNameServerAlias配置项。如果找到了,它就会使用这个服务器。否则,将使用符合这个IP地址的第一个列出的虚拟主机

综上所述,第一个列出的虚拟主机充当了默认虚拟主机的角色。当一个IP地址与NameVirtualHost指令中的配置相符的时候,主服务器中的DocumentRoot永远不会被用到。所以,如果你想创建一段特殊的配置用于处理不对应任何一个虚拟主机的请求的话,你只要简单的把这段配置放到<VirtualHost>段中,并把它放到配置文件的最前面就可以了。

下面练习题:

建立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

<VirtualHost *:80>
  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>

</VirtualHost>

<VirtualHost *:80>
  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> 
</VirtualHost>

<VirtualHost *:80>
        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">
                Options Indexes
                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

Apache 虚拟主机概念介绍相关推荐

  1. nginx虚拟主机概念和类型介绍

    nginx虚拟主机配置实战 1,虚拟主机概念和类型介绍 所谓虚拟主机,在web服务里就是一个独立的网站站点,这个站点对应独立的域名(也可能是IP或端口),具有独立的程序及资源目录,可以独立地对外提供服 ...

  2. 简单介绍apache虚拟主机配置的三种方式

    本文主要介绍了apache虚拟主机配置的三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 记事本打开httpd.conf文 ...

  3. Ubuntu 16.04与Apache虚拟主机配置的步骤详解

    这篇文章主要给大家介绍了关于Ubuntu 16.04与Apache虚拟主机配置的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用ubuntu16.04系统具有一定的参考学习价值,需要的朋友 ...

  4. 给Apache虚拟主机增加端口的方法

    这篇文章主要介绍了给Apache虚拟主机增加端口的方法,修改配置的方法很简单,需要的朋友可以参考下 找到你的apache安装目录,找到httpd.conf文件, 搜索#listen这一句,在下面增加 ...

  5. Apache 虚拟主机 VirtualHost 配置

    虚拟主机 (Virtual Host) 是在同一台机器搭建属于不同域名或者基于不同 IP 的多个网站服务的技术. 可以为运行在同一物理机器上的各个网站指配不同的 IP 和端口, 也可让多个网站拥有不同 ...

  6. 关于apache虚拟主机htttpd的配置实例 (更新中)

    关于apache虚拟主机htttpd的配置实例(更新中) 前提: 首先使用虚拟主机我们需要关闭取消中心主机 #vim/etc/httpd/conf/httpd.conf中查找DocumentRoot加 ...

  7. linux虚拟主机泛解析,Apache虚拟主机的配置和泛域名解析实现代码

    Apache虚拟主机的配置和泛域名解析实现代码 更新时间:2012年03月11日 00:28:19   作者: Apache虚拟主机的配置和泛域名解析实现代码,需要的朋友可以参考下 虚拟主机的配置 基 ...

  8. Apache虚拟主机相关配置

    目录 1.Apache默认虚拟主机 2.Apache用户认证 3.域名跳转 4.Apache访问日志 5.访问日志不记录静态文件 6.访问日志切割 7.静态元素过期时间 扩展 1.Apache默认虚拟 ...

  9. Apache 虚拟主机设置详解

    Apache 虚拟主机设置详解 我们通常所说的虚拟主机技术就是将一台(或者一组)服务器的资源(系统资源.网络带宽.存储空间等)按照一定的比例分割成若干台相对独立的"小主机"的技术. ...

最新文章

  1. 怎么修改docker镜像的名字_Docker这些none:none的镜像,难道就不配拥有名字吗
  2. lamp mysql脚本_初次尝试利用脚本自动编译搭建LAMP-----Mysql
  3. 电机编码器调零步骤_编码器原理、霍尔应用原理、调整步骤三个方面进行解读编码器调试...
  4. 论文浅尝 | 直译优于翻译?混合语言的知识库问答方法研究
  5. .htaccess防盗链方法
  6. 软件工程复习提纲——第二章
  7. 分布式数据库DDM Sidecar模式负载均衡
  8. 类支付宝微信密码输入框
  9. 动态规划法(九)想要更多例子? 1
  10. 两个框架之间的数据类型转换,需要桥接技术
  11. dll 源码_软件源代码调试,你用过什么方法?看我介绍上位机源码调试
  12. php speex转码为mp3,ffmpeg speex转换为mp3或者aac
  13. macos复制粘贴快捷键 快速_mac os系统复制粘贴ctrl+c ctrl+v快捷键实现方式
  14. 要重复多少次变成潜意识_速读记忆相关:量变到质变,首先要做的是不断重复...
  15. 2022-2028年中国中频加热设备行业市场发展调研及未来前景规划报告
  16. 001 第一季:SpringBoot2核心技术
  17. 基于jQuery/express/socket.io实现的匿名聊天室
  18. 为什么我说低代码是“行业毒瘤”?
  19. 计算机专业答辩开场白,毕业论文答辩开场白
  20. 我的、新的、纯粹的:触摸荣耀长大后的面庞

热门文章

  1. 大学丨电子科学与技术、电信和通信工程、微电子专业的区别和联系
  2. 【PG054】7 Series Integrated Block for PCI Express IP核的学习
  3. macbook pro 待机一段时间后就自动关机重启
  4. 编程精华资源大汇总 (转)
  5. 天涯社区是怎样一步步被人遗忘的?
  6. docker 快鸟_GitHub - fffonion/Xunlei-Fastdick: 迅雷快鸟 Xunlei Network Accelerator For Router
  7. mysql uniqueidentifier,sql-如何检查字符串是否为uniqueidentifier?
  8. 一篇顶级论文,让31岁的他破格晋升为仅次于院士级级教授,如今这个80后“土学者”已是211副校长...
  9. echarts使用细节
  10. 听说今天有1024勋章