WEB浏览器与WEBserver建立连接后,除了将请求URL中的资源路径发送给WEBserver外,还会将URL中的主机名部分作为HTTP请求消息的Host头发送给WEBserver。比如,在浏览器地址栏中输入http://www.it315.org,浏览器发送给www.it315.org主机上的WEBserver的请求消息内容例如以下:

GET  /  HTTP/1.1<回车>

Host:  www.it315.org<回车>

<回车>

WEBserver接收到浏览器的訪问请求消息后,依据Host头字段中所设置的主机名,就知道该选择哪个WEB网站来进行响应,因此,能够使用不同的主机名来作为区分同一个WEBserver上的不同网站的标识信息。

Tomcat的Server.xml配置文件里有一个<Host>元素,一个<Host>元素用于建立一个WEB网站,使用多个<Host>元素则能够建立多个WEB网站。<Host>元素的父级的元素中为<Engine>元素,嵌套在同一个<Engine>元素中的多个<Host>元素的name属性不能同样,<Host>元素的name属性指定WEB网站所相应的主机名称。Tomcat的Server.xml配置文件里初始设置的<Host>元素内容例如以下:

<Host name="localhost" appBase="webapps" …>

</Host>

<Host>元素中的appBase属性指定了一个路径,该路径将作为嵌套在它里面的<Context>元素的docBase属性中设置的相对路径的基准路径。

当Tomcat接收到訪问请求时,将比較请求消息中的Host头字段的值与<Host>元素的name属性值,并以匹配的<Host>元素所创建的WEB网站来响应。假设Server.xml文件里没有与请求消息的Host头字段匹配的<Host>元素,Tomcat将以默认的WEB网站来响应。仅仅要<Engine>元素的defaultHost属性设置为嵌套在它里面的某个<Host>元素的name属性值,该<Host>元素所创建的WEB网站就成了该引擎的默认WEB网站。比如,Tomcat的Server.xml文件里的<Engine>元素的默认设置例如以下:

<Engine name="Standalone" defaultHost="localhost" debug="0">

<Host name="localhost" appBase="webapps" …>

</Host>

</Engine>

上面的这段配置信息说明,该引擎的默认WEB网站为嵌套在<Engine>元素中的name属性为“localhost”的<Host>元素所创建的WEB网站。

在同一台计算机上建立了多个基于主机名的虚拟主机后,WEB浏览器要訪问当中的某个虚拟主机的资源时,在訪问URL中必须採用主机名,而不能採用IP地址。这是由于WEB浏览器要将URL中的主机名部分作为HTTP请求消息的Host头发送给WEBserver,假设URL中的主机名部分使用的是IP地址,那么,浏览器发出的请求消息中的Host头字段的值就是这个IP地址,而在同一台计算机上建立的多个基于主机名的虚拟主机共享同一个IP地址,在Host头字段使用IP地址根本就无法区分不同的网站。

即使在URL中指定的是主机名时,WEB浏览器还是要先获得该主机名所相应的IP地址,然后再使用这个IP去连接WEBserver。所以,在建立基于主机名的虚拟主机时,除了要在Tomcat的server.xml文件里进行设置外,还须要在整个网络系统中建立主机名与IP地址的映射关系,即必须将主机名加入到名称解析系统,以便WEB浏览器可以从名称解析系统中查询出主机名所相应的IP地址。建立主机名与IP地址的映射关系的惯用方式有两种:一是使用客户机本地的Hosts 文件,二是使用DNS(Domain Name System,域名系统)server。Hosts 文件和DNS的作用都是同意用户使用“友好”的、文本格式的主机名称,而不是数字格式的IP地址来訪问网络中的计算机。Hosts文件可用于小型的Intranet(企业内部网),网络中的全部计算机上都须要使用Hosts文件。DNS通经常使用于大型的网络,特别是Internet上对外提供服务的计算机都是通过DNS来建立其主机名与IP地址的映射关系。客户机首先在本地的Hosts文件里查找主机名称所映射的IP地址,假设没有找到,再去查询DNSserver。为了简单起见,这里仅介绍一下Hosts文件。对于Windows 2000系统,Hosts 文件位于操作系统根文件夹(取决操作系统所在的分区,一般是c:/winnt)下的System32/Drivers/Etc子文件夹中,默认情况下,该文件里有例如以下一行内容:

127.0.0.1       localhost

这行文本的作用就是将IP地址(127.0.0.1)映射成主机名(localhost),这也就是在IE浏览器地址栏中能够使用localhost訪问本地WEBserver的原因。假设要添加很多其它的主机名与IP地址的映射,能够在Hosts文件里添加很多其它的行,然后參照上面这行内容的格式在每行中填写IP地址和对应的主机名。

(1)用UltraEdit打开<Tomcat 主文件夹>/conf文件夹下的Server.xml文件,使用“查找”菜单查找内容为“</Host>”的行,紧接该行以下添加一对 <Host></Host>标签。參照前面的<Host>标签的属性设置情况,设置新增的<Host> 标签的属性,并在它里面嵌套一个设置该WEB网站根文件夹的<Context>元素,终于的内容例如以下:
        <Host name="site1" debug="0" appBase="d:/VirtualHost1">
               <Context path="" docBase="." debug="0"/>
        </Host>
这样,将创建一个新的WEB网站。上面的<Context>元素的docBase属性值被设置为一个点(.),即表示使用<Host>元素的appBase属性中所设置的路径作为这个<Context>所映射的文件夹。
(2)在上面新增的<Host></Host>标签对以下再添加一对<Host></Host>标签,并将它设置为例如以下形式:
        <Host name="site2" debug="0" appBase="d:/VirtualHost2">
               <Context path="" docBase="." debug="0"/>
        </Host>
这又创建了一个新的WEB网站,该网站的主机名称为site2,根文件夹相应的本地文件系统文件夹为d:/VirtualHost2。
(3)在d:盘下创建名称为VirtualHost1和VirtualHost2两个文件夹,并在这两个文件夹中分别创建一个名为test.html的文件,在d:/VirtualHost1/test.html文件里写入例如以下一行内容:
    这是d:/VirtualHost1文件夹中的test.html文件
在d:/VirtualHost2/test.html文件里写入例如以下一行内容:
    这是d:/VirtualHost2文件夹中的test.html文件
(4)保存改动后的Server.xml文件,又一次启动Tomcat WEBserver程序。打开一个新的命令行窗体中,并在这个命令行窗体中运行例如以下命令:
telnet 127.0.0.1 8080
接着在连接成功的telnet程序命令窗体中,输入例如以下内容:
        GET /test.html HTTP/1.1<回车>
        Host:<空格>site1<回车>
        <回车>
这时在telnet程序窗体中能够看到,WEBserver返回内容的正文部分为d:/VirtualHost1/test.html文件里的内容。接着WEBserver返回内容的下边,输入例如以下内容:
        GET /test.html HTTP/1.1<回车>
        Host:<空格>site2<回车>
        <回车>
在telnet程序窗体中又能够看到,WEBserver这次返回内容的正文部分为d:/VirtualHost2/test.html文件里的内容。接着WEBserver返回内容的下边,输入例如以下内容:
        GET /test.html HTTP/1.1<回车>
        Host:<空格><回车>
        <回车>
在telnet程序窗体中又能够看到,WEBserver这次返回内容的正文部分为d:/test/test.html文件里的内容。接着WEBserver返回内容的下边,再次输入例如以下内容:
        GET /test.html HTTP/1.1<回车>
        Host:<空格>xxx<回车>
        <回车>
在telnet程序窗体中又能够看到,WEBserver这次返回内容的正文部分仍然为d:/test/test.html文件里的内容。
上面的整个交互过程如图2.34所看到的,Tomcat根 据第1次和第2次请求中所指定Host头的值,查找Server.xml文件里与之相匹配的<Host>元素的name属性值,并以匹配的 <Host>元素所设置的WEB网站来响应;在第3次和第4次请求中所指定Host头的值,在Server.xml文件里没有与之相应的 <Host>元素的name属性值,Tomcat将以默认的WEB网站来响应。
图2.34
(5)在Windows 2000系统中,用记事本程序打开c:/winnt/System32/Drivers/Etc/Hosts文件,能够看到有例如以下一行内容:
        127.0.0.1        localhost
紧接这行文本的以下,用它复制出两行文本,并将这两行文本中的localhost分别改动成site1和 site2,这样,就使用Hosts文件为当前计算机设置了多个主机名。假设要用site1和site2这个两主机名訪问其它计算机上的WEB网站,则应 将127.0.0.1改动成其它计算机的实际IP地址。保存Hosts文件后,在命令行窗体中运行“ping site1”和“ping site2”命令,查看该主机名是否被正确解析到了对应的IP地 址上。建立site1和site2与计算机IP地址的映射后,在IE浏览器地址栏中输入http://localhost: 8080/test.html、http://site1:8080/test.html和http://site2:8080/test.html,可 以看到浏览器将显示出各自网站中的test.html网页文件的内容。
可见,使用主机名的方式在同一台WEBserver上创建多 个虚拟主机后,在WEB浏览器中使用主机名訪问Webserver时,Webserver将选择与该主机名关联的WEB网站进行响应。通过这样的方式,多个WEB网站可 以共享同一个IP地址和同样的port号,唯一不足的就是WEB浏览不能通过IP地址去訪问这些WEB网站。基于主机名的虚拟主机是眼下Internet上的 大多数虚拟主机业务提供商所通常採用的方式。仅仅要找出几个小型公司或个人的网站,假设在WEB浏览器地址栏中输入“http://主机名”能够訪问到该 WEB网站,接着在命令行窗体中运行“ping 主机名”,查看到该域名相应的IP地址,然后在WEB浏览器地址栏中输入“http://IP地址”时,却无法訪问这个WEB网站了,那么,这个WEB站 点就是一个基于主机名的虚拟主机,它与其它一些WEB网站共享一台WEBserver,而不是自己独享一台WEBserver。

注意:当使用安全套接字层 (SSL) 时,不能使用主机头字段来实现虚拟主机,这是由于使用SSL的HTTP请求有加密保护。主机头字段是加密内容的一部分,不能被解释和路由到正确的网站。

tomcat建立虚拟主机的更多相关文章

  1. Tomcat之虚拟主机配置以及web应用配置

    Tomcat之虚拟主机配置以及web应用配置 Tomcat文件夹结构例如以下: bin ---- 启动和关闭须要的bat文件所在的文件夹 conf --- 配置文件夹 lib ---  tomcat执 ...

  2. tomcat配置虚拟主机

    在眼下,非常多server都是一台server对外能够訪问非常多个javaEE的项目,这样的实现方式就须要在tomcat里面配置虚拟主机了!以下就说说怎样配置虚拟主机: 找到tomcat的安装文件夹, ...

  3. Tomcat配置虚拟主机、tomcat的日志

    1.配置Tomcat的虚拟主机修改:vim /usr/local/tomcat9/conf/server.xml 添加一个虚拟主机:加入: <Host name="www.tomcat ...

  4. Tomcat定义虚拟主机案例

    Tomcat定义虚拟主机案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备环境 1>.创建web程序的根目录 [root@yinzhengjie ~]# mkdir ...

  5. 二十二. 安装部署Tomcat服务器、使用Tomcat部署虚拟主机、使用Varnish加速Web

    web proxy web1 web2   1.安装部署Tomcat服务器 web1 1.1 使用RPM安装JDK环境 ]# yum -y install java-1.8.0-openjdk ]# ...

  6. 高级运维(四):Nginx常见问题处理、安装部署Tomcat服务器、使用Tomcat部署虚拟主机

    一.Nginx常见问题处理 目标: 本案例要求对Nginx服务器进行适当优化,以提升服务器的处理性能: 1> 不显示Nginx软件版本号 2> 如果客户端访问服务器提示“Too many ...

  7. Tomcat配置虚拟主机的两种方式

    1.基于主机名的虚拟主机配置 在随意盘符下建立一个目录作为虚拟地址的目录.例如:F:\virtualhost1,在其下建立 test1.html,写入内容例如:test 在tomcat/conf/se ...

  8. Tomcat配置虚拟主机后的登录验证码问题

    先描述一下问题现象,在本地测试运行一个java web网站,一切正常.但把网站部署到Linux服务器上后,发现登录出了问题,提示验证码输入不正确.登录时需要输入验证码,而验证码的原值是先存入sessi ...

  9. tomcat部署虚拟主机-搭建两个应用以及httpd和Nginx的反向代理

    实验环境:CentOS7 前提:已经安装好tomcat,未安装请查看http://www.cnblogs.com/wzhuo/p/7111135.html: 目的:基于主机名访问两个应用: [root ...

随机推荐

  1. JSP错题纠错

    A:判断学员是否手动安装过Tomcat(练习熟练度) B:使学员了解Tomcat的运行过程 ,浏览器向Web服务器发送请求,Web站点处理请求后,把处理后的结果响应给浏览器 C:Tomcat作为Web ...

  2. IOS UIImage 模糊

    #import <UIKit/UIKit.h> #import <Accelerate/Accelerate.h> #import <QuartzCore/QuartzC ...

  3. Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6633311 在上一篇文章中,我 们分析了And ...

  4. thinkphp框架的路径问题 - 总结

    thinkphp框架的路径问题 - 总结 (2011-06-21 11:01:28) 转载▼ 标签: thinkphp 框架 路径 杂谈 分类: Php TP中有不少路径的便捷使用方法,比如模板中使用 ...

  5. 线程:Exchanger同步工具

    可以在对中对元素进行配对和交换的线程的同步点,类似于交易,A拿着钱到达指定地点,B拿着物品到达指定地点,相互交换,然后各自忙各自的事去了. package ch03; import java.util ...

  6. PHP学习笔记三十一【const】

    <?php //常量都是public类型 // const 常量名=赋值 .变量名不需要加$符号,也不需要要访问修饰符,默认就是public class A{ const TAX_RATE=0. ...

  7. PHP学习笔记十六【方法】

    <?php //给一个函数传递基本数据类型 $a=90; $b=90.8; $c=true; $d="hello world"; function test1($a,$b,$ ...

  8. SPOJ 1811 Longest Common Substring (后缀自动机第一题,求两个串的最长公共子串)

    题目大意: 给出两个长度小于等于25W的字符串,求它们的最长公共子串. 题目链接:http://www.spoj.com/problems/LCS/ 算法讨论: 二分+哈希, 后缀数组, 后缀自动机. ...

  9. C++服务器设计(四):超时管理机制设计

    前四章介绍了系统层的设计,从这一章开始进入服务层的设计. 连接断开 在常见的服务器场景中,客户端断开连接的方式为被动关闭.即作为客户端请求完服务器的服务后,选择主动关闭同服务器的连接.在服务器的角度看 ...

  10. Java—Integer类

    Integer类 Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的字段. 该类提供了多个方法,能在 int 类型和 String 类型之间 ...