tomcat建立虚拟主机

系统 1757 0

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

        GET    /    HTTP/1.1< 回车 >

        Host:    www.it315.org< 回车 >

        < 回车 >

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

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 头发送给 WEB server,假设 URL 中的主机名部分使用的是 IP 地址,那么,浏览器发出的请求消息中的 Host 头字段的值就是这个 IP 地址,而在同一台计算机上建立的多个基于主机名的虚拟主机共享同一个 IP 地址,在 Host 头字段使用 IP 地址根本就无法区分不同的网站。

即使在 URL 中指定的是主机名时, WEB 浏览器还是要先获得该主机名所相应的 IP 地址,然后再使用这个 IP 去连接 WEB server。所以,在建立基于主机名的虚拟主机时,除了要在 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 地址,假设没有找到,再去查询 DNS server。为了简单起见,这里仅介绍一下 Hosts 文件。对于 Windows 2000 系统, Hosts 文件位于操作系统根文件夹(取决操作系统所在的分区,一般是 c:/winnt )下的 System32/Drivers/Etc 子文件夹中,默认情况下,该文件里有例如以下一行内容:

        127.0.0.1         localhost

这行文本的作用就是将 IP 地址( 127.0.0.1 )映射成主机名( localhost ),这也就是在 IE 浏览器地址栏中能够使用 localhost 訪问本地 WEB server的原因。假设要添加很多其它的主机名与 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网站来响应。 tomcat建立虚拟主机
图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建立虚拟主机


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论