Tomcat Server.xml配置详解
nanshan 2024-11-24 19:36 25 浏览 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连 ,点赞,转发,评论,
咱们下期见
相关推荐
- 手机看视频卡顿的系统化解决方案(手机看视频特别卡是什么原因)
-
手机看视频卡顿是日常使用中常见的问题,通常由网络不稳定、设备性能不足、应用设置不当或系统问题导致。以下方案按优先级排序,兼顾操作难度与解决效果,帮助你快速定位并解决卡顿问题。一、网络优化:解决最核心诱...
- 电子电路硬件测试基础-板级测试工具之示波器(1)
-
示波器介绍示波器,作为一种电子测试仪器,主要用于对电信号的波形进行测量、显示与分析。它的工作原理是将电信号的瞬时值转化为屏幕上的垂直偏移,并以时间为基准在水平轴上展开,进而生成信号的图形化呈现。借助示...
- 宽带安装避坑指南:从选套餐到验收全流程注意事项
-
在网络成为生活必需品的当下,看似简单的宽带安装实则暗藏诸多细节,稍不留意就会踩入隐藏费用、性能虚标等陷阱。掌握以下关键要点,助你轻松避开宽带安装雷区。一、选对运营商与套餐,拒绝隐形消费选择运营商时,不...
- 噪声分析及小信号测试(噪音中的信号是什么含义)
-
示波器在大量开关电源或大功率用电器等复杂环境下进行自环测试,容易出现视频中的噪声问题。示波器在进行小信号测试时,我们要考虑地线带来的干扰,一般设置要求是:一、带宽限制打开;二、尽可能短的地线,一般使用...
- 怀疑房间被装了监控?深度解析检测方法与步骤
-
在现代社会中,隐私保护日益受到重视。当我们租房、住酒店或身处私人住宅时,如果发现房间内有异常的迹象,如电器无故自动开关、网络速度突然变慢、电费异常增加,或者在某些特定区域总感觉“被注视”,这些都可能是...
- 如何快速鉴定网线好坏?怎样测网线电阻?
-
一、快速鉴定网线好坏的3大核心技巧1.外观检测法:5秒看穿网线本质标识验证:正品网线外皮应清晰印有"CAT5e""CAT6"等类别标识,以及米数刻度(如30...
- 网速慢?教你快速检测网卡速率! #网络测速
-
网卡是百兆还是千兆?你知道吗?网速慢可能就是因为网卡不够快,今天就来教你如何快速检查网卡。1.打开CMD:首先找到电脑,按下Win+R键,输入cmd,然后按回车,这就打开了命令提示符...
- 怎么查自己家WiFi多少兆?(苹果手机测wifi网速)
-
怎么查自己家WiFi多少兆?在数字化生活日益普及的今天,家庭WiFi的速度直接影响着我们上网冲浪、在线学习、视频通话等日常活动的流畅度。了解自家WiFi的带宽通常以兆比特每秒Mbps为...
- 家里宽带网速不理想?测一下就知道了
-
家里网络不理想,经常发生卡顿或是网络抖动?可能是家里宽带的影响,这时候不妨实际测试下网速看看,是否符合预期。个人最近经历过两次上网卡顿问题,第一个是上个月回老家,刷剧的时候,发现有加载缓慢的情况,10...
- Linux 必备的20个核心知识点(linux内核知识点)
-
学习和使用Linux所必备的20个核心知识点。这些知识点涵盖了从基础操作到系统管理和网络概念,是构建扎实Linux技能的基础。Linux必备的20个知识点1.Linux文件系统层级标...
- 忆享科技戟星安全实验室|内网隧道技术,你知道几个?
-
本文约6000字,阅读约需15分钟。0x00前言在实际环境中,会有各种网络设备、防火墙以及入侵检测系统阻止外网与内网的通信,我们构建内网隐蔽通道来突破安全策略的限制,实现对目标机器的控制。当我们在外...
- Win10怎么连接linux虚拟机?(win10搭建linux虚拟机)
-
这个不难,主要是ping一下ip,检查win10系统是否和Linux虚拟机连通,接着开启ssh服务,如果一切正常的话,就可以连接linux虚拟机,这里简单介绍一下实现过程,实验环境win10+vmwa...
- 如何在CentOS中配置静态IP地址?(centos6.5配置静态ip地址)
-
静态IP地址是在计算机网络中使用的固定IP地址,与动态分配的IP地址相对。在CentOS中,通过配置网络设置,您可以轻松地为您的系统设置静态IP地址。本文将详细介绍在CentOS中配置静态IP地址的步...
- Firewalld的简单使用(firewall direct)
-
从Centos7开始默认防火墙就已经更换为了firewall,替换了之前的iptablesFirewalld服务采用firewall-cmd或firewall-config(图形化工具)来动态管理ke...
- Vmware设置静态IP和主机访问(vmware 设置固定ip)
-
摘要:Vmware设置静态IP和主机访问关键词:Vmware、静态IP、主机访问整体说明最近在做大模型的本地部署,发现之前的Virtualbox,不太能用到本地的英伟达GPU,所以开始使用...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)