Tomcat配置文件详解:server.xml完全指南
引言:为什么server.xml是Tomcat的"神经系统"
作为Java Web开发者,你是否曾遇到过这些问题:服务器启动失败却找不到原因?应用并发量一高就崩溃?HTTPS配置总是出错?这些问题的根源往往藏在Tomcat最核心的配置文件——server.xml中。
server.xml作为Tomcat的主要配置文件,定义了服务器的整体架构、网络连接方式、虚拟主机设置和安全配置。一个优化的server.xml配置能使你的Web应用性能提升30%以上,同时显著增强系统安全性。本文将带你全面掌握server.xml的结构与配置技巧,从基础到高级,让你成为Tomcat配置专家。
读完本文后,你将能够:
- 理解server.xml的层次化结构与核心组件
- 优化Connector配置以提升并发处理能力
- 正确配置HTTPS与SSL/TLS安全连接
- 实现多虚拟主机与负载均衡
- 解决常见的配置错误与性能问题
server.xml文件结构解析
整体架构:Tomcat的"俄罗斯套娃"模型
server.xml采用XML格式,遵循严格的层次化结构。最外层是Server元素,内部嵌套Service、Connector、Engine、Host等核心组件。这种结构类似于"俄罗斯套娃",每个组件都有明确的职责和作用范围。
核心组件关系表
| 组件 | 作用 | 父组件 | 子组件 |
|---|---|---|---|
| Server | 整个Tomcat实例 | 无 | Service, Listener, GlobalNamingResources |
| Service | 关联Connector与Engine | Server | Connector, Engine |
| Connector | 处理客户端连接 | Service | 无 |
| Engine | 请求处理引擎 | Service | Host, Realm |
| Host | 虚拟主机 | Engine | Context, Valve |
| Context | Web应用上下文 | Host | Servlet, Filter等 |
| Listener | 生命周期事件监听 | Server, Service, Engine等 | 无 |
| Valve | 请求/响应处理阀门 | Engine, Host, Context | 无 |
| Realm | 认证与授权 | Engine, Host, Context | 无 |
详细配置指南
1. Server元素:Tomcat实例的"大脑"
Server元素是server.xml的根元素,代表整个Tomcat实例。
<Server port="8005" shutdown="SHUTDOWN">
<!-- 子组件 -->
</Server>
核心属性:
| 属性 | 描述 | 默认值 | 建议配置 |
|---|---|---|---|
| port | 关闭端口,用于接收关闭命令 | 8005 | 生产环境建议修改为非默认端口 |
| shutdown | 关闭命令字符串 | SHUTDOWN | 建议修改为复杂字符串增强安全性 |
| className | 实现类 | org.apache.catalina.core.StandardServer | 通常无需修改 |
安全最佳实践:
- 修改默认关闭端口和命令:
<Server port="8888" shutdown="MySuperSecretShutdownCommand">
- 生产环境可考虑禁用远程关闭功能,通过防火墙限制访问此端口
2. Listener元素:Tomcat的"事件响应系统"
Listener元素用于监听Tomcat生命周期事件,执行相应操作。
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
常用监听器及其作用:
| 监听器类名 | 作用 | 启用建议 |
|---|---|---|
| VersionLoggerListener | 启动时记录Tomcat版本信息 | 开发环境启用,生产环境可禁用 |
| AprLifecycleListener | 支持APR(Apache Portable Runtime) | 建议启用,提升性能 |
| OpenSSLLifecycleListener | Java 22+的OpenSSL支持 | Java 22+环境可启用 |
| JreMemoryLeakPreventionListener | 防止JRE内存泄漏 | 必须启用 |
| ThreadLocalLeakPreventionListener | 防止ThreadLocal内存泄漏 | 必须启用 |
| SecurityListener | 安全相关监听 | 生产环境建议启用 |
配置示例:启用安全监听器
<Listener className="org.apache.catalina.security.SecurityListener" />
3. GlobalNamingResources:全局JNDI资源
GlobalNamingResources定义全局JNDI(Java Naming and Directory Interface)资源,供整个服务器使用。
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
常见应用:配置全局数据源
<Resource name="jdbc/GlobalDataSource"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb"
username="dbuser"
password="dbpass"
maxTotal="100"
maxIdle="20"
minIdle="5"
maxWaitMillis="10000"/>
4. Service元素:连接器与引擎的"粘合剂"
Service元素将一个或多个Connector与一个Engine关联起来。
<Service name="Catalina">
<!-- Connector和Engine -->
</Service>
属性说明:
name:服务名称,默认"Catalina",用于标识服务
多服务配置示例:
<Service name="Catalina">
<!-- HTTP服务配置 -->
</Service>
<Service name="CatalinaAJP">
<!-- AJP服务配置 -->
</Service>
5. Connector元素:Tomcat的"通讯接口"
Connector元素定义Tomcat与客户端通信的端点,是性能优化的关键。
5.1 HTTP连接器基础配置
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
核心属性:
| 属性 | 描述 | 默认值 | 优化建议 |
|---|---|---|---|
| port | 监听端口 | 8080 | 生产环境建议使用80端口(需root权限) |
| protocol | 协议类型 | HTTP/1.1 | 高性能场景使用org.apache.coyote.http11.Http11Nio2Protocol |
| connectionTimeout | 连接超时时间(毫秒) | 20000 | 根据应用特性调整,建议10000-30000 |
| redirectPort | HTTPS重定向端口 | 8443 | 与HTTPS连接器端口一致 |
| maxThreads | 最大线程数 | 200 | 根据服务器CPU核心数调整,通常设为(2*CPU核心数+1) |
| minSpareThreads | 最小空闲线程数 | 10 | 建议设为maxThreads的1/4 |
| acceptCount | 最大等待队列长度 | 100 | 高并发场景可增加到200-500 |
| enableLookups | 是否反向解析IP为主机名 | false | 保持禁用,提升性能 |
| compression | 是否启用压缩 | off | 建议设为"on"或"force" |
| compressableMimeType | 可压缩的MIME类型 | text/html,text/xml,text/plain | 增加application/json,application/javascript |
5.2 线程池配置
使用共享线程池提升性能:
<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="200"
minSpareThreads="20"
maxIdleTime="60000"
prestartminSpareThreads="true"/>
<Connector executor="tomcatThreadPool"
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Executor属性说明:
name:线程池名称,供Connector引用namePrefix:线程名称前缀maxThreads:最大线程数minSpareThreads:最小空闲线程数maxIdleTime:线程最大空闲时间(毫秒)prestartminSpareThreads:是否预启动最小空闲线程
5.3 HTTPS配置
配置SSL/TLS安全连接:
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150"
SSLEnabled="true">
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
certificateKeystorePassword="changeit"
type="RSA" />
</SSLHostConfig>
</Connector>
HTTPS配置步骤:
- 生成密钥库:
keytool -genkeypair -alias tomcat -keyalg RSA -keysize 2048 -keystore conf/keystore.jks -validity 3650
- 配置Connector:
<Connector port="443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="200"
SSLEnabled="true">
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/keystore.jks"
certificateKeystorePassword="yourpassword"
type="RSA" />
</SSLHostConfig>
</Connector>
- 强制HTTPS重定向:
<Valve className="org.apache.catalina.valves.RemoteIpValve" />
<Valve className="org.apache.catalina.valves.RequestDumperValve" />
<Valve className="org.apache.catalina.authenticator.FormAuthenticator" />
5.4 AJP连接器配置
AJP(Apache JServ Protocol)连接器用于与Apache HTTP服务器集成:
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443"
secretRequired="true"
secret="yourSecretKey" />
安全注意事项:
- 必须设置
secretRequired="true"和secret="yourSecretKey" - 限制监听地址
address="127.0.0.1",只允许本地访问 - 生产环境如不使用Apache前端,建议禁用AJP连接器
6. Engine元素:请求处理的"中央处理器"
Engine是Service的请求处理引擎,负责将请求路由到适当的Host。
<Engine name="Catalina" defaultHost="localhost">
<!-- Realm和Host配置 -->
</Engine>
核心属性:
name:引擎名称,默认"Catalina"defaultHost:默认虚拟主机名,必须与某个Host的name属性匹配jvmRoute:用于集群环境,标识当前JVM实例,用于会话粘性
集群配置示例:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<!-- 其他配置 -->
</Engine>
7. Realm元素:Tomcat的"身份验证系统"
Realm提供用户认证和授权功能,控制对Web应用的访问。
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
常用Realm类型:
| Realm类型 | 描述 | 适用场景 |
|---|---|---|
| UserDatabaseRealm | 基于XML文件的用户数据库 | 开发环境、简单应用 |
| JDBCRealm | 基于关系型数据库 | 生产环境,用户数据存储在数据库 |
| DataSourceRealm | 基于JNDI数据源 | 生产环境,支持连接池 |
| JNDIRealm | 基于LDAP目录服务 | 企业环境,集成现有LDAP |
| MemoryRealm | 基于内存的用户存储 | 测试环境 |
JDBCRealm配置示例:
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/tomcat_users"
connectionName="dbuser"
connectionPassword="dbpass"
userTable="users" userNameCol="user_name" userCredCol="user_pass"
userRoleTable="user_roles" roleNameCol="role_name"/>
8. Host元素:虚拟主机配置
Host元素定义虚拟主机,允许在单个Tomcat实例上部署多个Web应用。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- Valve和Context配置 -->
</Host>
核心属性:
| 属性 | 描述 | 默认值 | 配置建议 |
|---|---|---|---|
| name | 主机名 | localhost | 配置为域名,如"www.example.com" |
| appBase | 应用基础目录 | webapps | 建议使用绝对路径,如"/opt/tomcat/webapps" |
| unpackWARs | 是否自动解压WAR文件 | true | 开发环境true,生产环境false提升性能 |
| autoDeploy | 是否自动部署 | true | 生产环境建议设为false,手动控制部署 |
| deployOnStartup | 启动时是否部署应用 | true | 大型应用可设为false,手动触发部署 |
| xmlValidation | 是否验证XML配置 | false | 生产环境建议设为true |
| xmlNamespaceAware | 是否启用XML命名空间 | false | 与xmlValidation保持一致 |
多虚拟主机配置示例:
<Host name="www.example.com" appBase="/opt/webapps/example"
unpackWARs="false" autoDeploy="false">
<Context path="" docBase="ROOT" />
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs/example"
prefix="example_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<Host name="blog.example.com" appBase="/opt/webapps/blog"
unpackWARs="false" autoDeploy="false">
<Context path="" docBase="ROOT" />
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs/blog"
prefix="blog_access_log" suffix=".txt"
pattern="combined" />
</Host>
9. Context元素:Web应用上下文
Context元素定义Web应用的上下文配置,可嵌套在Host中。
常用配置方式:
- 在server.xml中直接配置:
<Context path="/myapp" docBase="/opt/apps/myapp"
reloadable="false" cachingAllowed="true"
cacheMaxSize="102400" />
- 在
$CATALINA_BASE/conf/[enginename]/[hostname]/目录下创建XML文件
核心属性:
| 属性 | 描述 | 默认值 | 配置建议 |
|---|---|---|---|
| path | 应用访问路径 | 空字符串 | 根应用设为"",其他应用设为"/appname" |
| docBase | 应用目录或WAR文件路径 | 无 | 使用绝对路径提高可靠性 |
| reloadable | 是否自动重载类文件 | false | 开发环境true,生产环境false |
| cachingAllowed | 是否启用静态资源缓存 | true | 生产环境建议启用 |
| cacheMaxSize | 缓存最大大小(KB) | 10240 | 根据应用静态资源大小调整 |
| sessionTimeout | 会话超时时间(分钟) | 30 | 根据应用需求调整,一般15-60分钟 |
| privileged | 是否允许访问容器内部API | false | 除非必要,保持false |
资源配置示例:
<Context path="/myapp" docBase="/opt/apps/myapp">
<Resource name="jdbc/MyDB" auth="Container" type="javax.sql.DataSource"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb"
username="dbuser" password="dbpass" maxTotal="20" maxIdle="10"/>
<ResourceLink name="jdbc/LinkedDB" global="jdbc/GlobalDB" type="javax.sql.DataSource"/>
<Parameter name="app.version" value="2.5" override="false"/>
</Context>
10. Valve元素:Tomcat的"过滤器"
Valve元素类似于过滤器,可在请求处理的不同阶段拦截请求和响应。
常用Valve配置:
10.1 访问日志Valve
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log"
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %D" />
日志格式说明:
%h:客户端IP地址%l:远程逻辑用户名(通常为'-')%u:认证用户(未认证为'-')%t:请求时间%r:请求行(方法、URL、协议)%s:状态码%b:响应大小(字节,不包括HTTP头)%D:处理时间(微秒)%{Referer}i:Referer请求头%{User-Agent}i:User-Agent请求头
10.2 安全相关Valve
<!-- 防止点击劫持 -->
<Valve className="org.apache.catalina.valves.HeadersValve"
addDefaultHeaders="true"
alwaysAddStrictTransportSecurity="true"
strictTransportSecurity="max-age=31536000; includeSubDomains"
contentSecurityPolicy="default-src 'self'"
xFrameOptions="DENY"
xXssProtection="1; mode=block"
xContentTypeOptions="nosniff" />
<!-- IP访问控制 -->
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192\.168\.1\.\d+|127\.0\.0\.1"
deny="192\.168\.1\.100" />
10.3 性能相关Valve
<!-- 请求限流 -->
<Valve className="org.apache.catalina.valves.RateLimitValve"
limit="100" burst="20" period="60" />
性能优化实践
1. 连接器性能调优
优化配置示例:
<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="500"
minSpareThreads="50"
maxIdleTime="60000"
prestartminSpareThreads="true"
maxQueueSize="100"/>
<Connector executor="tomcatThreadPool"
port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
redirectPort="8443"
acceptCount="200"
maxConnections="10000"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,application/json,application/javascript"
disableUploadTimeout="true"
keepAliveTimeout="60000"
maxKeepAliveRequests="100"/>
关键优化点:
- 使用NIO2协议(
Http11Nio2Protocol)提升异步IO性能 - 合理设置线程池大小,根据CPU核心数和内存容量调整
- 启用压缩减少网络传输量
- 优化Keep-Alive设置,减少TCP连接建立开销
2. JVM参数优化
虽然JVM参数不在server.xml中配置,但对Tomcat性能至关重要:
export CATALINA_OPTS="$CATALINA_OPTS -Xms2G -Xmx2G"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
export CATALINA_OPTS="$CATALINA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat"
export CATALINA_OPTS="$CATALINA_OPTS -Djava.awt.headless=true -Dfile.encoding=UTF-8"
3. 静态资源优化
<Context path="/myapp" docBase="/opt/apps/myapp">
<Resources cachingAllowed="true" cacheMaxSize="102400" />
<Valve className="org.apache.catalina.valves.ExpiresValve"
expireByType text/html="access plus 1 hour"
expireByType text/css="access plus 1 week"
expireByType text/javascript="access plus 1 week"
expireByType image/jpeg="access plus 1 month"
expireByType image/png="access plus 1 month" />
</Context>
常见问题解决
1. 端口冲突问题
错误信息:Address already in use: JVM_Bind
解决方法:
- 查找占用端口的进程:
# Linux
netstat -tulpn | grep 8080
# Windows
netstat -ano | findstr :8080
- 修改冲突端口:
<Connector port="8081" protocol="HTTP/1.1" ... />
2. 内存泄漏问题
症状:Tomcat运行一段时间后内存占用持续增加
解决方法:
- 确保启用内存泄漏防护监听器:
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
- 配置应用卸载时的线程清理:
<Context ...>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
</Context>
3. HTTPS配置错误
常见错误与解决:
-
证书文件找不到:
- 确保certificateKeystoreFile路径正确,使用绝对路径
-
密钥库密码错误:
- 验证密钥库密码是否正确
- 使用keytool验证密钥库:
keytool -list -keystore conf/keystore.jks
-
浏览器安全警告:
- 确保证书由可信CA签发
- 配置正确的证书链
4. 应用部署问题
自动部署不生效:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
deployOnStartup="true" deployXML="true">
<!-- 确保deployXML设为true -->
</Host>
生产环境最佳实践
1. 目录结构规划
/opt/tomcat/
├── conf/ # 配置文件
├── lib/ # 共享库
├── logs/ # 日志文件
├── webapps/ # Web应用
├── temp/ # 临时文件
├── work/ # 工作目录
├── backups/ # 配置备份
└── scripts/ # 启动/停止脚本
2. 安全加固措施
- 移除默认应用:docs、examples、host-manager、manager
- 禁用管理界面或限制访问IP
- 修改默认关闭端口和命令
- 使用非root用户运行Tomcat
- 定期更新Tomcat版本修复安全漏洞
- 启用安全监听器和 valves
- 配置强密码策略
- 限制JNDI资源访问权限
3. 监控与日志配置
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="access_log" suffix=".txt"
pattern="combined"
rotate="true"
maxDays="30"
fileDateFormat="yyyy-MM-dd"/>
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="10001"
rmiServerPortPlatform="10002"
username="jmxuser"
password="jmxpassword"/>
总结与展望
server.xml作为Tomcat的核心配置文件,掌握其配置技巧对于构建高性能、高安全性的Java Web应用至关重要。本文详细介绍了server.xml的结构和各组件配置,包括Server、Listener、Connector、Engine、Host等核心元素,以及性能优化和安全加固的最佳实践。
随着云原生技术的发展,Tomcat也在不断演进,如支持HTTP/2、WebSocket、GraalVM原生镜像等特性。未来,server.xml配置可能会更加简化,更多配置将通过环境变量和注解方式实现,但XML配置的灵活性和强大功能仍然不可替代。
建议开发者定期查阅Tomcat官方文档,关注新版本特性,不断优化服务器配置,以适应不断变化的应用需求和技术环境。
附录:server.xml配置模板
以下是一个生产环境的server.xml模板,可根据实际需求调整:
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8888" shutdown="MySecureShutdownCommand">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.security.SecurityListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
<Resource name="jdbc/GlobalDS" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://dbhost:3306/mydb"
username="dbuser" password="dbpass"
maxTotal="100" maxIdle="20" minIdle="5"
maxWaitMillis="10000" />
</GlobalNamingResources>
<Service name="Catalina">
<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="500"
minSpareThreads="50"
maxIdleTime="60000"
prestartminSpareThreads="true"
maxQueueSize="100"/>
<Connector executor="tomcatThreadPool"
port="80"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
redirectPort="443"
acceptCount="200"
maxConnections="10000"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,application/json,application/javascript"
disableUploadTimeout="true"
keepAliveTimeout="60000"
maxKeepAliveRequests="100"/>
<Connector port="443"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="200"
SSLEnabled="true">
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeystoreFile="/opt/tomcat/conf/keystore.jks"
certificateKeystorePassword="securepassword"
type="RSA" />
</SSLHostConfig>
</Connector>
<Engine name="Catalina" defaultHost="www.example.com">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://dbhost:3306/authdb"
connectionName="authuser" connectionPassword="authpass"
userTable="users" userNameCol="username" userCredCol="password"
userRoleTable="user_roles" roleNameCol="role"/>
</Realm>
<Host name="www.example.com" appBase="/opt/webapps/example"
unpackWARs="false" autoDeploy="false">
<Context path="" docBase="ROOT" reloadable="false" />
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs/example"
prefix="example_access_log" suffix=".txt"
pattern="combined" />
<Valve className="org.apache.catalina.valves.HeadersValve"
addDefaultHeaders="true"
xFrameOptions="SAMEORIGIN"
xXssProtection="1; mode=block"
xContentTypeOptions="nosniff" />
</Host>
<Host name="api.example.com" appBase="/opt/webapps/api"
unpackWARs="false" autoDeploy="false">
<Context path="" docBase="ROOT" reloadable="false" />
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs/api"
prefix="api_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b %D" />
</Host>
</Engine>
</Service>
</Server>
参考资料
- Apache Tomcat官方文档: https://tomcat.apache.org/tomcat-10.1-doc/index.html
- Tomcat Configuration Reference: https://tomcat.apache.org/tomcat-10.1-doc/config/index.html
- Tomcat Security Best Practices: https://tomcat.apache.org/tomcat-10.1-doc/security-howto.html
- Apache Tomcat Performance Tuning: https://tomcat.apache.org/tomcat-10.1-doc/perf-tuning.html
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



