售前咨询
技术支持
渠道合作

详解Tomcat  server.xml的主配置文件

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

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

<Server port=”8005″ shutdown=”SHUTDOWN”>

<Service name=”Catalina”>

<Executor …… />

<Connector …… />

<Connector …… />

<Engine name=”Catalina” … >

<Host name=”localhost” … >

<Context … />

</Host>

</Engine>

</Service>

</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 定义如下:

<Connector port=”80″ protocol=”HTTP/1.1″

connectionTimeout=”60000″

redirectPort=”443″ />

EXECUTOR 的配置

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

<Executor name=”tomcatThreadPool” namePrefix=”catalina-exec-”

maxThreads=”150″ minSpareThreads=”4″/>

然后修改上述的 Connector 配置,增加 executor 属性,修改后的配置如下:

<Connector executor=”tomcatThreadPool”

port=”80″ protocol=”HTTP/1.1″

connectionTimeout=”60000″

redirectPort=”443″ />

HOST 的配置

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

<Host name=”localhost”  appBase=”webapps”

unpackWARs=”true” autoDeploy=”true”>

<Alias>dog.com</Alias>

<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”

prefix=”localhost_access_log.” suffix=”.txt” pattern=”common” resolveHosts=”false”/>

</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 节点:

<Host name=”www.dog.com”  appBase=”/var/lib/tomcat6/dog”>

</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 实现,比如:

<Alias>dog.com</Alias>

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

ENGINE 的配置

默认的 Engine 节点如下:

<Engine name=”Catalina” defaultHost=”localhost”>

</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。


SSL证书是HTTP明文协议升级HTTPS加密协议的重要渠道,是网络安全传输的加密到通道。GDCA专注于网络信息安全领域,已通过WebTrust 的国际认证,具备国际化电子认证服务能力,是全球可信任的SSL证书签发机构。

上一篇:

下一篇:

相关文章