xml配置service服务器文件路径,tomcat 配置文件server.xml 详解 Connector Engine Host Context...

本文详细介绍了Tomcat的核心配置文件server.xml,包括server、service、Executor、Connector和Host等元素的配置,以及相关属性的作用和用法,如端口设置、线程池管理、连接器参数等,帮助读者理解Tomcat的配置原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AAffA0nNPuCLAAAAAElFTkSuQmCC

一 server.xml

server.xml 是tomcat 的核心配置文件,位于./conf/ 下.具有server,connector

Hosts 等元素模块。接下来我们看看吧。(导游介绍词)。本文内容基于tomcat 8.5 不同版本配置或有差异性。

tomcat 8.5是基于Servlet 3.1和JavaServer Pages 2.3。

tomcat 测试war包下载路径 测试war包

server.xml 结构图(还有些其他元素没有加入)

AAffA0nNPuCLAAAAAElFTkSuQmCC

1.1 server 配置

server 是server.xml 的最外层元素,常用的属性有:属性描述示例className要使用的java 类名

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

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

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

1.2 service 配置

service 是 server 的内层。可以将一个多个service 放在server 层里,

一个service 里面可以有多个 Connector 和一个Engine .

service 的属性属性描述className要使用的java类名,未指定的话就使用标准的实现

nameservice显示的名称

1.3 Executor

官方文档链接

这个元素我们在平时配置的过程中用得比较少,它主要用于在多个connector 之间进行共享线程池。它的位置应该在 connector 之前,这样才能生效。

Executor 的属性 :属性描述示例className要使用的java类名

name用于在server.xml中的其他位置引用此池的名称。该名称是必需的,必须是唯一的。

threadPriority执行程序中线程的优先级 ,默认为5

daemon线程是否为守护线程,默认为 True

namePrefix每个线程的名称的前缀,单个线程的名称=namePrefix+threadNumber

maxThreads该线程池中最大的线程数,默认为200

minSpareThreads最小线程数,就是在空闲时保持的最少线程数 ,默认为25

maxIdleTime空闲线程关闭之前等待的时间,单位毫秒,默认是6000毫秒也就是一分钟

maxQueueSize最大任务等待的数量,默认值是Integer.MAX_VALUE,也就是2147483647(java int整数的最大值)

prestartminSpareThreads是否应该在启动Executor时启动minSpareThreads,默认值为 false

1.4 Connector 配置

关于 Connector 官网链接

当前以下所有的说明是针对 tomcat 8.5版本来说的,其他版本详情见官方文档。参数含义示例port绑定的端口,如果设置为0,tomcat则随机获取一个空闲端口默认 port="8080"

protocol传输协议和版本默认 protocol = "HTTP/1.1"

connectionTimeout连接超时时间,单位毫秒默认 connectionTimeout="20000"

redirectPort接收到的ssl请求后重定向的端口默认 redirectPort="8443"

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

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

minProcessors启动时创建的线程数(最小线程数)minProcessors="50"

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

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

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

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

enableLookups调用request、getRemoteHost()执行DNS查询,以返回远程主机的主机名,如果设置为false,则直接返回IP地址 默认是禁用的,在请求过滤中的根据远程主机名过滤,需要将该参数设置为trueenableLookups="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的值,使用好该值可以提升并发请求。

示例配置

connectionTimeout="20000"

redirectPort="8443"

acceptCount="300" 

acceptorThreadCount="2" 

compression="on" 

keepAliveTimeout="25000" 

maxConnections="5000" 

maxThreads="400" 

minSpareThreads="25" 

/>

maxThreads 配置说明(网上盗图,不提倡啊,哈哈)

AAffA0nNPuCLAAAAAElFTkSuQmCC

1.5 Engine

Engine 结构示意图

AAffA0nNPuCLAAAAAElFTkSuQmCC

Engine 的属性属性描述className要使用的实现的Java类名。

defaultHost默认的主机名

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

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

Engine 必须嵌套在service 中。

Host(官网文档链接)

host 元素表示一个虚拟主机,我们常将一个主机与一个应用程序相连接

host 元素嵌套在Engine 元素里面。我们可以将Context 元素嵌套在Host元素里面。

Host 的属性属性描述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,和自动部署应用程序。

日志记录(官网链接)属性描述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模式。

默认访问日志配置

prefix="localhost_access_log" suffix=".txt"

pattern="%h %l %u %t "%r" %s %b" />

请求过滤器(基于请求ip 官网链接)

基于ip地址对请求进行过滤处理。限制条件可以使用正则表达式,但是它和普通的正则语法有所不同,它采用的是java.util.regex 包。可以用";" 来分割端口限制。

拒绝请求时的行为可以更改为不拒绝,而是设置无效的authentication 标头。这与context属性 preemptiveAuthentication="true" 结合使用。

在过滤带有ipv6地址的请求的时候,需要注意过滤器匹配的ip地址格式,详细见官网。属性描述className要使用的实现的Java类名

allowip地址,多个以逗号分隔如果指定了此属性,则远程地址必须匹配此请求才能被接受。如果未指定此属性,则将接受所有请求,除非远程IP与deny属性中的网络掩码匹配。

denyip地址,多个以逗号分隔如果指定了此属性,如果指定了此属性,则远程地址必须不匹配才能接受此请求。如果未指定此属性,则请求接受仅受accept 属性控制。

denyStatus拒绝请求时使用的HTTP响应状态代码。默认值为403。例如,它可以设置为值404。

addConnectorPort匹配请求的主机名和端口,设置为true 的话ip(deny的值)和端口(connector 端口)都符合要求的话才能接受请求,默认为false

invalidAuthenticationWhenDeny当请求要被拒绝时,不要直接拒绝,采用设置无效的authentication标头,来拒绝,这是在context设置 preemptiveAuthentication="true"时才可以设置的

示例:仅允许从localhost 连接

allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"/>仅允许允许从localhost 连接,但其它客户端连接到8443的不受限制

addConnectorPort="true"

allow="127\.\d+\.\d+\.\d+;\d*|::1;\d*|0:0:0:0:0:0:0:1;\d*|.*;8443"/>

3.允许任何客户端请求访问8009端口,其它端口要触发身份验证

...  

addConnectorPort="true"

invalidAuthenticationWhenDeny="true"

allow=".*;8009"/>

...

请求过滤器(基于请求主机名 官网链接)

用于限制不符合条件的客户端,接收符合条件的客户端。

限制条件可以使用正则表达式,但是它和普通的正则语法有所不同,它采用的是java.util.regex 包。

拒绝请求时的行为可以更改为不拒绝,而是设置无效的authentication 标头。这与context属性 preemptiveAuthentication="true" 结合使用。

注意:此过滤器返回的值获取方法ServletRequest.getRemoteHost()需要获取正确的主机名。要允许该方法返回正确的主机名,您必须在 connector 上启用 enableLookups 参数。(因为该过滤器是基于主机名过滤,所以要开启获取主机名才能获取到主机名的值)属性描述className要使用的实现的java类名

allow请求的主机名和正则表达式进行比较,如果指定了该属性,必须要满足条件才能接受请求,如果未指定此属性,则除非请求主机名与deny 模式匹配,否则将接受所有请求。

deny满足该条件的请求被拒绝,如果未指定此属性,则请求接受仅受allow属性控制

denyStatus拒绝请求时使用的HTTP响应状态代码。默认值为403。例如,它可以设置为值404。

addConnectorPort匹配请求的主机名和端口,设置为true 的话 ip(deny的值)和端口(connector 端口)都符合要求的话才能接受请求,默认为false

invalidAuthenticationWhenDeny当请求要被拒绝时,不要直接拒绝,采用设置无效的authentication标头,来拒绝,这是在context设置 preemptiveAuthentication="true"时才可以设置的

context 配置 (官网链接)It is NOT recommended to place  elements directly in the server.xml file.

建议我们不要将context 直接放在server.xml 文件里面,因为这样不太安全。放在conf/server.xml 下的话,如果不重新启动tomcat的话是无法加载里面的配置的。如果我们在其他位置也配置了context的话,是会覆盖server.xml 的配置的。如果我们仍要以server.xml 的文件为主的话,那么我们需要将context 的override 参数设置为true .

但我实际测试的话,发现不设置override为true ,在server.xml 和conf/Catalina/localhost/djx.xml 配置相同的path 名称,不同的war包最后还是server.xml 生效了。

context 元素定义的三种方式:conf/server.xml (不建议)

示例webapps/appname/META-INF/context.xml,

示例: manager/META-INF/context.xml<?xml  version="1.0" encoding="UTF-8"?>

allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

conf/Catalina/localhost/djx.xml ,文件名为访问路径,示例:

注意点

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

context 的属性属性描述示例docBaseweb应用程序的路径,如果使用了符号链接的话,那么更改了链接的话需要重新启动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关联

Context 路径命名示例

AAffA0nNPuCLAAAAAElFTkSuQmCC

WatchedResource 属性,用于监控war包后的解压文件,如果更改则自动重新加载

示例:WEB-INF/web.xml

以上就是server.xml 的一些元素和属性,还有一些我们没有列举的,我们可以去官网文档查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值