tomcat的Server.xml详解和Host的配置

基于以下说法的领悟:

若只配appBase,不配Context 的docBase(appBase和docBase二选一就可以了),则appBase的每个文件夹里都代表一个应用,每个应用都必须放ROOT文件夹,ROOT里则包含web所有文件,如图:

<host appBase="d:/aaa">
<Context path="/smswap" reloadable="true" docBase="D:\workspace\smswap\WebRoot"></Context>
</host>

我们先看appBase,这个目录表示:
1 这个目录下面的子目录将自动被部署为应用。
2 这个目录下面的.war文件将被自动解压缩并部署为应用

而docBase只是指向了你某个应用的目录,这个可以和appBase没有任何关系。

总结:
如果你想自己指定路径,那么应该在docBase里面
如果你想简单,那么直接把他们复制到appBase下面就行了

如果你把他们弄重复了,也就是2个指向了一个目录,看上去也能运行,但你的应用下面的每个子目录,其实是被部署为单独的应用的。
比如你的应用为

myApp, 放在了
d:\project\myApp
里面有2个子目录
d:\project\myApp\images
d:\project\myApp\js

你可以通过
1 设置 appBase 指向 d:\project 来让系统自动部署
2 你可以手工指定docBase到 d:\project\myApp
3 如果你指定了 appBase到 d:\project\myApp 那么
d:\project\myApp\images这个将不再是普通的子目录,而是一个单独的虚拟目录,或者叫应用了。因为其被自动部署

d:\project\myApp\js 也一样的后果

---------------------------------------------------------分割线--------------------------------------------------------

转自:http://www.cnblogs.com/gentoo/archive/2012/10/13/2722463.html

4、认识 Tomcat 的主配置文件 server.xml

这个文件位于 tomcat 6 安装目录之下的 conf 目录之内,实际内容位于 /etc/tomcat6/server.xml。

正如该文件的扩展名所示,这是一个 xml 格式的文件,打开之后将会看到如下的结构:

[html]  view plain  copy
 
 
 
 
  1. <Server port="8005" shutdown="SHUTDOWN">  
  2.     <Service name="Catalina">  
  3.         <Executor ...... />  
  4.         <Connector ...... />  
  5.         <Connector ...... />  
  6.         <Engine name="Catalina" ... >  
  7.             <Host name="localhost" ... >  
  8.                 <Context ... />  
  9.             </Host>  
  10.         </Engine>  
  11.     </Service>  
  12. </Server>  

即一个由 Server->Service->Engine->Host->Context 组成的四层结构,从里层向外层分别是:

  • Context: 即 Web 应用程序,一个 Context 即对于一个 Web 应用程序。
  • Host:即虚拟主机,比如 www.dog.com 对应一个虚拟主机,api.dog.com 对于另一个虚拟主机。一个 Host 用于定义一个虚拟主机。(所谓的”一个虚拟主机”可简单理解为”一个网站”)
  • Engine:一组虚拟主机的集合。比如www.dog.com 和 api.dog.com 可以组成一组虚拟主机集合。
  • Service:一组 Engine 的集合,包括线程池 Executor 和连接器 Connector 的定义。

CONNECTOR 的配置

一个 Connector 即一个对外界开放的端口,简单理解就是大部分网络服务程序都会遇到的 IpAddress:Port 的组合,比如 192.168.0.10:8080 就是一个端口,当然在 Connector 里可以定义的内容要丰富得多,即 Connector 这个 XML 节点里可以加上许多属性。下面列举一下常用的:

  • enableLookups:(default=true) 是否允许反向解析访客的IP地址,当你的应用程序使用 request.getRemoteHost() 时如果只需要IP地址,建议禁用此项,这样能节省反向域名解析的时间。
  • maxPostSize:(default=2097152 即2MB) 最大允许 POST 上传的数据大小(单位为:字节),对于一般网站来说,比如有写评论写文章的网站,默认的2MB已经足够,不过如果网站带有图片甚至文件上传功能,则需要根据具体情况来定。
  • protocol:连接器的类型,tomcat 6 有如下几种选择
    • org.apache.coyote.http11.Http11Protocol:简写为 “HTTP/1.1″,这是默认的连接器,一个访客网络连接需要一个线程,并发性能比较低。
    • org.apache.coyote.http11.Http11NioProtocol:NIO连接器,一个由非阻塞的socket工作模式构成的连接器,并发性能良好,纯Java实现。
    • org.apache.coyote.http11.Http11AprProtocol:APR连接器,所谓 APR 就是网络上最多服务器使用的 Web 服务程序 Apache Http Server 所使用的库,Tomcat 建议在生产环境使用,具体方法下面会介绍。
  • redirectPort:当用户访问非https的资源而该资源又需要https方式访问时,tomcat会自动重定向到https端口,一般https使用 TCP 443端口,所以一般取值”443″。
  • SSLEnabled:(default=false),设置当前连接器是否使用安全SSL传输,如果设置为”true”,则应该同时设置下面两个属性: scheme=”https” (default=http) 可以设置为 http 或者 https。 secure=”true” (default=false)。
  • adress:连接器所绑定的IP地址,当一台服务器存在多个ip地址时可以指定其中的需要绑定的一个,默认不设置该属性的值表示绑定当前服务器的所有ip地址。
  • compressableMimeType:(default=”text/html,text/xml,text/plain”) 指定需要GZIP压缩的资源的类型。
  • compression:(default=off) 是否启用GZIP压缩,可以取值 on/off/force,设置为on之后会对 compressableMimeType 属性指定的资源类型启用GZIP压缩。
  • connectionTimeout:(default=”60000″) 当访客网络连接后,服务器等待第一行Request头出现的时间。单位是毫秒。
  • executor:指定当前连接器使用的线程池的名称,如果指定,则忽略其他针对线程数量的设置,比如 maxThreads。
  • maxThreads:(default=200) 最多可创建线程的数量。
  • port=”80″:绑定端口。
  • keepAliveTimeout:(default=connectionTimeout),访客完成一次请求后维持网络连接的时间。

一个简单的 Connector 定义如下:

[html]  view plain  copy
 
 
 
 
  1. <Connector port="80" protocol="HTTP/1.1"  
  2.                connectionTimeout="60000"  
  3.            redirectPort="443" />  

EXECUTOR 的配置

Executor 用于定义共享的线程池。默认情况下每个 Connector 都会产生自己的一个线程池,如果你想多个 Connector 共享一个线程池,则可以先定义一个线程池,如:

[html]  view plain  copy
 
 
 
 
  1. <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"  
  2.         maxThreads="150" minSpareThreads="4"/>  
  3. 然后修改上述的 Connector 配置,增加 executor 属性,修改后的配置如下:  
  4.   
  5. <Connector executor="tomcatThreadPool"  
  6.                port="80" protocol="HTTP/1.1"  
  7.                connectionTimeout="60000"  
  8.                redirectPort="443" />  

HOST 的配置

一个 Host 配置即为一个虚拟主机,例如下面是一个简单的 Host 配置:

[html]  view plain  copy
 
 
 
 
  1. <Host name="localhost"  appBase="webapps"  
  2.             unpackWARs="true" autoDeploy="true">  
  3.         <Alias>dog.com</Alias>  
  4.         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"    
  5.                prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>  
  6. </Host>  

Host 配置节点各个属性的作用:

  • name:设置虚拟主机的域名,比如 localhost 表示本机名称,实际应用时应该填写具体域名,比如 www.dog.com 或者 dog.com,当然如果该虚拟主机是给内部人员访问的,也可以直接填写服务器的 ip 地址,比如 192.168.1.10。
  • autoDeploy:是否允许自动部署,默认值是 true,即表示 Tomcat 会自动检测 appBase 目录下面的文件变化从而自动应用到正在运行的 Web 应用程序。
  • unpackWARs:设置是否自动展开 war 压缩包再运行 Web 应用程序,默认值是 true。
  • appBase:设置 Web 应用程序组的路径。前面说过一个虚拟主机可以由多个 Web 应用程序构成,所以这里的 appBase 所指向的目录应该是准备用于存放这一组 Web 应用程序的目录,而不是具体某个 Web 应用程序的目录本身(即使该虚拟主机只由一个 Web 应用程序组成)。appBase 属性的值可以是相对于 Tomcat 安装目录的相对路径,也可以是绝对路径,需要注意的是该路径必须是 Tomcat 有权限访问的,通过 Arch Linux 源安装的 Tomcat 是通过 tomcat 用户运行的,因此创建一个新的 appBase 目录之后可以使用 chown 命令更改目录的所有者。

下面举例说明如何创建一个新的虚拟主机 www.dog.com:

在目录 /var/lib/tomcat6 下面可以看到安装 Tomcat 时默认创建的 webapps 目录,为了方便管理我们即将创建的虚拟主机的文档也在 /var/lib/tomcat6 里创建:

$ sudo mkdir dog

然后在 dog 目录里面创建目录 ROOT,再在 ROOT 里面创建文件 index.html(内容随便)。

现在将目录的所有者和所有组都更改为 tomcat:

$ sudo chown -R tomcat:tomcat dog

然后在 server.xml 的 Host 节点下增加如下 Host 节点:

[html]  view plain  copy
 
 
 
 
  1. <Host name="www.dog.com"  appBase="/var/lib/tomcat6/dog">  
  2. </Host>  

重启 Tomcat 服务就可以在浏览器里通过地址 http://www.dog.com 访问这个新创建的虚拟主机了,当然你必须要先在 /etc/hosts 文件里增加 www.dog.com 到 127.0.0.1 的解析记录,如下:

127.0.0.1    www.dog.com

有时一个虚拟主机可能会同时绑定多个域名,比如 www.dog.com 和 dog.com,这时可以通过在 Host 配置节点里增加 Alias 实现,比如:

[xml]  view plain  copy
 
 
 
 
  1. <span style="margin:0px;padding:0px;"><span style="margin:0px;padding:0px;"><Alias<span style="margin:0px;padding:0px;">></span></span></span>dog.com<span style="margin:0px;padding:0px;"><span style="margin:0px;padding:0px;"></Alias<span style="margin:0px;padding:0px;">></span></span></span>  

另外上面示例当中的 <Valve className=… /> 配置了访客的访问日志的储存位置以及文件名。

ENGINE 的配置

默认的 Engine 节点如下:

[html]  view plain  copy
 
 
 
 
  1. <Engine name="Catalina" defaultHost="localhost">  
  2. </Engine>  

这个应该不用展开叙述了,其中 defaultHost 用于指定访客在没有相应的虚拟主机时,Tomcat 默认选择的虚拟主机的名称。考虑如下的情形:

假如有3个域名都 DNS 解析到你的服务器,比如 dog.com, www.dog.com, api.dog.com,当前你只配置了虚拟主机 dog.com 和 www.dog.com,那么当有个访客通过 api.dog.com 访问你的服务器时,Tomcat 就会依据 defaultHost 的设置返回其中一个虚拟主机运行的结果。实际应用中 defaultHost 应该设置为你的主力域名,比如 www.dog.com。

5、多站点的配置:设置多个HOST节点

有时我们需要在一台服务器上跑多个站点,通过 Tomcat 很容易实现这点,下面假设我们要搭建 www.dog.com 和 www.cat.com 这两个站点。

首先要确定你的两个域名的 DNS 已经能正确解析到你的服务器,因为这里我们是做实验,所以可以在本机添加域名解析。修改 /etc/hosts 文件,加入如下两行:

127.0.0.1    www.cat.com
127.0.0.1    www.dog.com

然后在 /var/lib/tomcat6 目录里分别创建名字为 cat 和 dog 的两个目录,然后在每个目录里都创建名字为 ROOT 的目录,并在 ROOT 里面创建名字为 index.html 文件(内容随便)。然后将目录 cat 和 dog 的所有者和所有组都更改为 tomcat,方法参考上一节,这里不再赘述。

现在编辑 Tomcat 的主配置文件 server.xml,在默认的 Host 节点下面再加入如下两个新的 Host 节点:

[html]  view plain  copy
 
 
 
 
  1. <Host name="www.dog.com" appBase="/var/lib/tomcat6/dog" autoDeploy="true" unpackWARs="true">  
  2. </Host>  
  3. <Host name="www.cat.com" appBase="/var/lib/tomcat6/cat" autoDeploy="true" unpackWARs="true">  
  4. </Host>  

在 Host 节点里面可以根据上一节的说明加入自己需要的属性或者 Alias 和 Value 子节点。重启 Tomcat 服务,现在应该可以在浏览器里分别通过 http://www.dog.com 和 http://www.cat.com 浏览这两个站点了。

猜你喜欢

转载自www.cnblogs.com/chenjunsheng/p/10172857.html