百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Tomcat Server.xml配置详解

nanshan 2024-11-24 19:36 26 浏览 0 评论


在理解Tomcat配置之前,需要先熟悉一下Tomcat的架构,便于更好的修改配置。

一、Tomcat结构

server:即服务器,每个tomcat程序启动后,就是一个server。

service:这是一种抽象的服务,通常是在日志或者管理时使用这样一个概念。它把连接器和处理引擎结合在一起。

connector:用于处理连接和并发,通常包括两种方式HTTP和AJP。HTTP是用于网页地址栏http这种访问方式;AJP一般用于搭配Apache服务器。

engine:处理引擎,所有的请求都是通过处理引擎处理的。

host:虚拟主机,用于进行请求的映射处理。每个虚拟主机可以看做独立的请求文件。

realm:用于配置安全管理角色,通常读取tomcat-uesrs.xml进行验证。

context:上下文,对应于web应用

组件之间的整体关系,总结如下:

一个Server元素中可以有一个或多个Service元素。

一个Service可以包含多个Connector,但是只能包含一个Engine;Connector接收请求,Engine处理请求。

Engine、Host和Context都是容器,且 Engine包含一个或者多个Host。

Host包含零个或多个Context。每个Host组件代表Engine中的一个虚拟主机;

Valve、Realm可以嵌入在Host/Engine/Context元素内。

二、Tomcat目录

三、Server.xml配置

1、<Server>节点

<Server port="8005" shutdown="SHUTDOWN">

属性

描述

示例

className

要使用的java 类名


address

服务器等待接收shutdown 命令的地址,默认localhost


port

接收shutdown命令的端口,设置为-1 为禁用关闭端口,也就是你不能通过这种方式来关闭了,这样就会影响你使用脚本(catalina.sh 或者是shutdown.sh)来stop了,默认绑定8005端口

port="8005"

shutdown

指定shutdown 命令的别名,默认值SHUTDOWN

shutdown="SHUTDOWN"

2、<Service>节点

<Service name="Catalina">

属性

描述

className

要使用的java类名,未指定的话就使用标准的实现

name

service显示的名称

3、 <Connector>节点

<Connector port="8080" protocol="HTTP/1.1" maxHttpHeaderSize="409600" connectionTimeout="20000" redirectPort="8443" />

当前以下所有的说明是针对 tomcat 8.5版本来说的,其他版本详情见官方文档。

参数

含义

示例

port

绑定的端口,如果设置为0,tomcat则随机获取一个空闲端口

默认 port="8080"

protocol

传输协议和版本

默认 protocol = "HTTP/1.1"

connectionTimeout

连接超时时间,单位毫秒

默认 connectionTimeout="20000"

redirectPort

接收到的ssl请求后重定向的端口

默认 redirectPort="8443"

maxThreads

tomcat能创建来处理请求的最大线程数,也为最大并发数 超过则放入请求队列中进行排队,默认值为200;需要根据业务和系统性能进行调整

maxThreads="1000"

URIEncoding

url的字符编码,在tomcat8.5版本中,该值默认为UTF-8,除非在org.apache.catalina.STRICT_SERVLET_COMPLIANCE 将system property 设置为true才会使用ISO-8859-1

URIEncoding="UTF-8"

minProcessors

启动时创建的线程数(最小线程数)

minProcessors="50"

acceptCount

指定当所有可以使用的处理请求的线程数都被使用时,可以放到队列中的请求数,就是被排队的请求数,超过这个数的请求将拒绝连接 默认值为100

acceptcount="500"

acceptorThreadCount

可以用于接受连接的进程数,默认为1,但是在一些多核的的服务器上,我们会将它的值设置为2或者更大的数,来应对一些不活跃的连接。


minSpareThreads

最小空闲线程数,任何情况都会存活的线程数,即便超过了最大空闲时间,也不会被回收,默认值10;

minSpareThreads="25"

maxSpareThreads

最大空闲线程数,在最大空闲时间(maxIdleTime)内活跃过,此时空闲,当空闲时间大于maxIdleTime则被回收,小则继续存活,等待被调度,默认值50;


enableLookups

调用request、getRemoteHost()执行DNS查询,以返回远程主机的主机名,如果设置为false,则直接返回IP地址 默认是禁用的,在请求过滤中的根据远程主机名过滤,需要将该参数设置为true

enableLookups="false"

maxIdleTime

最大空闲时间,超过这个空闲时间,且线程数大于minSpareThreads的,都会被回收,默认值1分钟(60000ms)

maxPostSize

address

对于一些具有多个ip的服务器,我们可以通过该参数指定绑定的ip,默认情况下监听所有的地址

address="192.168.1.110"

compressibleMimeType

该值用来指定哪些文件类型的文件可以进行压缩,默认值为:text/html,text/xml,text/plain,text/css,text/javascript,application/javascript


compression

开启gzip 压缩,可以接受的值是 "off"(禁用压缩),"on"(开启压缩),"force(强制压缩)","1-9"(等效于开启压缩,并且设定压缩等级),开启了压缩,也就意味着要占用更多的cpu资源

compression

compressionMinSize

在compression 参数指定为on后,该参数用来指定压缩的阈值,只有大于该阈值才会被压缩,默认为 2048


keepAliveTimeout

指connector两个HTTP请求直接的等待时间,超过该时间没有接收到第二个HTTP请求就关闭连接,默认是使用connectionTimeout 的值,单位为毫秒


maxConnections

在一定时间内可以接受和处理的最大连接数,达到限制后,服务器接受但不处理该链接,但可以存放到acceptCount,该默认值因连接器类型而异。对于NIO和NIO2,默认值为10000。对于APR / native,默认为8192。


maxCookieCount

请求允许的最大cookie 数,值小于0表示无限制,默认值为 200


disableUploadTimeout

默认是true ,禁用数据上传超时


connectionUploadTimeout

设定数据上传的超时时间,只有在disableUploadTimeout设置为false才生效,单位毫秒

connectionUploadTimeout="50000"

processorCache

进程缓冲器,默认值是maxThreads的值,使用好该值可以提升并发请求。


配置样例

<Connector port="8080"

protocol="HTTP/1.1" connectionTimeout= "20000"redirectPort= "8443"

acceptCount="300" <!--默认值为100-- acceptorThreadCount="2" <!--默认值为1,在多核的情况下可设置该值-->

compression="on" <!-- 开启对响应数据的压缩传输-->

keepAliveTimeout="25000" <!-- 等待请求时间 默认值是使用为connectionTimeout属性设置的值 -->

maxConnections="5000" <!-- 服务器在给定时间接受和处理的最大连接数,对于NIO和NIO2,默认值为10000。对于APR / native,默认为8192。-->

maxThreads="400" <!-- 最大并发数,默认为200-->

minSpareThreads="25" <!-- 始终保持运行的最小连接数,默认值为10--> />

4、<Engine>节点

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

属性

描述

className

要使用的实现的Java类名。

defaultHost

默认的主机名

name

Engine 的名称,在一个server 中使用多个service元素时,必须给每个Engine分配一个唯一的名称

startStopThreads

启动Host 的线程数,默认为1

5、<host>节点

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

属性

描述

name

域名名称,tomcat会将其全部转化为小写,如果你设置的是*.baidu.com,那么你将匹配www.baidu.com admin.baidu.com 等等以baidu.com 结尾的域名。那么只有是符合该域名的条件的请求才能接受。

appBase

指的是虚拟主机的应用程序目录,可以是绝对路径,也可以是相对tomcat目录的相对路径,如果未指定将使用默认值"webapps"

unpackWARs

默认为true,如果设置为true 表示将web应用程序war包解压,false表示直接从war文件运行。注意点1:如果设置为true,tomcat解压了该应该程序的包,会向该解压缩的包里面添加一个文件(/META-INF/war-tracker),用于在tomcat未运行时检测war文件(注意是war文件而不是解压目录里面的文件)是否更改。如果war文件更改了,则会重新加载。是针对未启动的时候啊,如果是tomcat正常启动的话更改war包的话是会自动重新加载发布的。注意点2: 如果该属性设置为false的话将导致性能下降

autoDeploy

指tomcat在运行时是否要定期检查有没有新的应用程序,如果true,tomcat会定期检查appBase 和xmlBase 目录,如果找到了会自动部署的web应用程序,默认为true

xmlBase

指包含该Host部署的应用程序的Context的xml文件路径。可以是绝对路径也可以是相对tomcat目录的相对路径。如果未指定将使用"conf//"

createDirs

指在tomcat启动的时候将创建appBase和xmlBase定义的目录,默认为true

className

要使用的实现的Java类名,如果没有指定,将使用标准值。

deployIgnore

这个属性是相对appBase的,foo只能匹配文件或者目录foo,而不能匹配foo.war

deployOnStartup

指tomcat在启动时是否应该自动部署来自该Host的web应用程序,默认为true

startStopThreads

指Host用于启动Context的线程数,默认值为1

undeployOldVersions

在自动部署的情况下,tomcat是否检查旧的未使用的web应用程序,如果找到,将其删除,在autoDeploy为true且本属性为true才生效,默认值为false

deployXML

如果你不想使用web应用程序的/META-INF/context.xml,你可以将该值设置为false,线上环境也建议设置为false,

copyXML

该属性的值如果设置为true,会在程序启动时(且xmlBase无该应用程序对应的xml文件)将位于应用程序的/META-INF/context.xml 的文件,复制到xmlBase下,如果有的话是不会复制的,后续是会以xmlBase里的xml的配置为主的,即使应用程序的/META-INF/context.xml更新了,也是不会生效的。默认为false. copyXML的属性要生效的话前提得deployXML 属性为true,否则不生效。

workDir

指该Host 应用程序要使用的临时目录的路径名,如果在Context中也指定了workDir将替换掉这里的配置,如果未指定,默认为$CATALINA_BASE/work。

当autoDeploy 为true 时,tomcat 在启动后会监控部署的web应用程序的文件是否改变,根据具体的改变,web应用程序将重新加载或重新部署。重新部署的不会保留用户会话,重新加载的则会保留。

Context 中的docBase 的路径应该在appBase(Host)之外,否则可能会导致部署两次,属性deployIgnore可以避免这种情况。

如果在server.xml 中定义了Context 属性,则应该关闭deployIgnore,和自动部署应用程序。

6、<Valve>节点中的访问日志记录部分

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />

属性

描述

buffered

是否缓冲日志记录,默认为True,如果设置为false,则在每次请求后将写入访问日志记录

className

要使用的实现的java类名

directory

存放日志文件的目录的相对路径或者绝对路径,默认值为$ CATALINA_BASE/logs

encoding

用于写日志文件的字符集。空字符串表示使用系统默认字符集。默认值:使用系统默认字符集。

fileDateFormat

设定访问日志文件切割时间,默认值为.yyyy-MM-dd,也就是每天切割一次,如果你希望每小时切割一次则设置为.yyyy-MM-dd.HH

maxDays

保留日志的最大天数,如果未指定的话,默认值为-1,意味着将永远不会删除旧文件

maxLogMessageBufferSize

日志消息缓冲区大小,默认大小为256bytes,该值应该设置为大于常规日志的消息大小

prefix

日志前缀,为每个日志文件名称的开头,如果未指定,则默认值为"access_log"

renameOnRotate

设置为true 时,当天的日志是不会带有时间戳的,过往日志是会带有的,设置为false当天的日志也带有时间戳的,默认为false

rotatable

用于设置日志是否切割的标准,默认为true,如果设置为false的话,则该文件永远不会被切割,且忽略参数fileDateFormat

suffix

日志文件的后缀名称,默认为"",表示不添加后缀

pattern

是指日志格式,也就是我们日志输出的内容和格式具体配置见下文

pattern

%a - 远程IP地址 
%A - 本地IP地址 
%b - 发送的字节数,不包括HTTP标头,如果为零则为“ - ” 
%B - 发送的字节数,不包括HTTP标头 
%h - 远程主机名(如果enableLookups连接器为false,则为IP地址 )
%H - 请求协议 %l - 来自identd的远程逻辑用户名(始终返回' - ')
%m - 请求方法(GET,POST等) %p - 收到此请求的本地端口。
%q - 查询字符串(前缀为'?',如果存在) 
%r - 请求首行(方法和请求URI) 
%s - 响应的HTTP状态代码 
%S - 用户会话ID 
%t - 日期和时间,采用通用日志格式 
%u - 经过身份验证的远程用户(如果有),否则为“ - ” 
%U - 请求的URL路径 %v - 本地服务器名称 
%D - 处理请求所用的时间(以毫秒为单位) 
%T - 处理请求所用的时间,以秒为单位 
%F - 提交响应所用的时间,以毫秒为单位 
%I - 当前请求线程名称 
%X - 响应完成时的连接状态: X =连接在响应完成之前中止。 + =发送响应后,连接可以保持活动状态。 - =发送响应后将关闭连接。

pattern="common" 对应于'%h%l%u%t“%r”%s%b'定义的通用日志格式 。
pattern="combined" 将 每个双引号中的Referer和User-Agent标题的值附加到common模式。

7、<context>节点

<Context docBase="/tmp/foo" reloadable="false" />

属性

描述

示例

docBase

web应用程序的路径,如果使用了符号链接的话,那么更改了链接的话需要重新启动tomcat才能生效

docBase="/tmp/svnadmin.war"

override

设置为true,则忽略全局中的设置,以现有的来覆盖之前的,默认为false


path

匹配对应的web应用,与请求的url的开头匹配,如果指定为""的话,该应用接收未匹配的所有请求


reloadable

设置为true表示Catalina将监视 /WEB-INF/classes/和/WEB-INF/lib的文件,一旦发生更改将自动重新加载Web应用程序。它可以在在开发的时候使用,但需要消耗更多资源,官方文档写到不建议在生产环境上使用,所以它的默认值是false.


workDir

设置临时文件和目录的路径,如果未指定,默认临时目录在在$CATALINA_BASE/work


preemptiveAuthentication

默认为false,当设置为true,用户为不受安全约束保护的资源提供凭据,如果身份验证器支持抢占式身份验证,那么将处理用户的凭据,该参数和过滤请求中的属性invalidAuthenticationWhenDeny关联


除了server.xml 外,任何定义Context的文件只能定义一个context 元素

资料收集与网上,感谢网友分享。参考链接如下。

Tomcat 6 —— Realm域管理

详解Tomcat 配置文件server.xml

官方配置说明

如果本文对你有帮助,别忘记给我个3连 ,点赞,转发,评论,

咱们下期见

相关推荐

人人视频崩了怎么回事 人人视频下架了吗为什么刷不出来了

[海峡网]人人视频挂了吗下架了吗人人视频崩了怎么回事刷不出来了?人人视频发生了什么?怎么都看不成了,暂时还是永久?本来还以为是手机的问题,原来是客户端崩了难怪一直显示服务器异常!追着的美剧突然都下架...

502 bad gateway怎么解决?(502 bad gatewaynginxundefined)

相信许多小伙伴都遇到打开的网页提示502badgateway,502badgateway是提示用户该网址的网关错误,Web服务器作为网关或代理服务器时收到无效的响应,不管怎么刷新怎么重新输入地...

2岁男童眼睛被滴入强酸药水,医生亲身“试”药吓坏了……

平日里,小孩子爱玩爱闹是常事儿,但是大人的注意力如果时不时的掉线可就麻烦了。这一天,杭师大附院眼科陈舒主任医师像往常一样在接诊病人,然而一个孩子的哭闹声引起了她的注意,一群人神情焦灼,簇拥着一个孩子急...

3岁男童误将502胶当滴眼液,幸好妈妈及时处理,医生也为她点赞

小孩子由于心智还不够成熟,因此往往会做出一些危险的事情,甚至对自己造成伤害,这就需要家长的监督和保护。巧也不巧,日常生活中能够对孩子造成威胁的东西实在是太多了,堪称数不胜数,水笔、筷子、桌角,甚至刚拖...

5岁娃把502胶当眼药水滴眼中,爸爸的做法很机智,医生都称赞

文|哑铃妈妈家里有小孩子的一定要注意,在我们的家里存在很多的安全隐患,有的时候连家长都想不到的东西,竟然对孩子带来了伤害。5岁娃把502胶当眼药水滴眼中,爸爸的做法很机智,医生都点赞女孩乐乐长得可爱,...

宝宝误食502胶水,连忙送医救治,医生却夸宝妈做得好

有了孩子之后,妈妈都会变得神经敏感,生怕自己没有把孩子照顾好,但是毕竟一个人的经历是有限的,再加上孩子要是会走路,会说话之后对宝妈来说更是一种挑战,危及可能无时无刻不存在,这不,因为宝妈一转身的功夫,...

记一次Netty「直接内存溢出」导致线上网关项目宕机排查过程

作为一名Java开发者,我们都知道Java进程是运行在Java虚拟机上的,而Java进程要想正常运行则需要向计算机申请内存,其中主要为Java对象实例所占用的堆(heap)内存(当然还有其他的也会占用...

刚刚,突然崩了!网易云音乐紧急回应

今天下午#网易云音乐崩了#登上微博热搜第一在社交平台上,不少网友反馈,网易云音乐疑似崩溃。网友晒出网页端出现“502BadGateway”的服务器错误,同时网易云音乐的移动应用程序也无法正常使用。...

常见状态码(常见的状态码)

一二三四五原则:(即一:消息系列;二:成功系列;三:重定向系列;四:请求错误系列;五:服务器端错误系列。301状态码是永久移动302是临时移动304如果请求头中带有If-None-Match...

8岁男孩眼睛溅入502胶水,妈妈一番操作结果粘得更紧了

家有小孩的爸妈们肯定会多留个心眼照看虽然生活中已经时刻留意可能造成伤害的物品但有时一不留神幼小的孩子就会做出让人担心的事↓↓↓家住深圳的辰辰(化名)今年8岁了3月31日他在家里做手工时想要用未开封的5...

3岁娃滴502胶水在眼睛疼的尖叫,宝妈急中生智,保住孩子眼睛

但还好宝妈急中生智,连忙将孩子带到水龙头处,用水给孩子冲洗了一下眼睛,还用大量的生理盐水来给孩子清洗眼球,之后又立马将孩子送往医院,最后孩子的眼睛也没有什么大碍,拿了点药就能顺利出院了。而502胶水这...

网易云音乐回应App崩了:故障已陆续修复,补偿7天会员

2024年8月19日下午,多名网友反馈称,网易云音乐服务器疑似出现故障,登录网易云音乐APP后发现,个性化推荐和搜索功能均无法使用,并收到“获取数据失败”的提示。此外,网易云音乐的网页端也显示502错...

又崩了!不少人直接傻眼:太离谱!(台湾人到大陆后傻眼)

造车新势力哪吒汽车再被推向舆论风口。5月4日,话题#曝哪吒汽车APP断网#冲上微博热搜App断网无法使用从5月2日开始,陆续有多位网友反映哪吒汽车App断网,App控车无法使用。哪吒汽车App目前出现...

男子误把502胶水当眼药水!千万别犯这种低级错误!

你敢相信吗?有人竟然误把五零二胶水当成了眼药水滴进眼睛里。这可不是什么玩笑话,而是近日发生在武汉的一起真实事件。一名男子因此导致眼角膜严重受损,不得不紧急就医。据武汉大学附属爱尔眼科医院报道,这名男子...

502入眼危机!这份急救指南请牢记(502进入眼中怎么办)

502入眼,真实案例触目惊心生活中,502胶水是常用的黏合剂,以其强力黏合性备受青睐。但它一旦进入眼睛,后果不堪设想,下面这些真实案例,足以让我们警醒。曾有这样一则新闻,一位4岁女童在家玩耍时...

取消回复欢迎 发表评论: