Tomcat的配置文件中有哪些关键的配置项,它们分别有什么作用?
Tomcat的配置文件主要包括server.xml和web.xml,它们位于Tomcat安装目录下的conf文件夹中。今天的内容重点介绍 server.xml 文件的配置,V 哥会结合一些业务场景来介绍,希望可以帮助到你,以下是一些关键的配置项及其作用:
server.xml中的配置项:
<Server>: 根元素,定义了Tomcat服务器的配置。port: 用于设置Tomcat服务器的端口,默认是8005。
<Service>: 定义服务的元素,包含一个或多个<Connector>和<Engine>。name: 服务的名称。port: 服务监听的端口。
<Connector>: 定义HTTP连接的配置。port: HTTP连接的端口,默认是8080。protocol: 连接使用的协议,如HTTP/1.1。redirectPort: 当使用SSL时,非SSL请求被重定向到的端口。
<Engine>: 定义引擎的配置,引擎是Tomcat的组件,用于路由请求到相应的<Host>。defaultHost: 默认主机名。
<Host>: 定义虚拟主机的配置。name: 虚拟主机的名称,可以是域名或IP地址。appBase: 应用程序的基础目录。unpackWAR: 是否解压WAR文件。
<Context>: 定义Web应用程序的上下文配置。path: Web应用程序的路径。docBase: Web应用程序的基础目录或WAR文件的路径。reloadable: 是否允许重新加载应用程序。
<Listener>: 定义服务器监听器,用于执行启动和停止操作。<Realm>: 定义安全域,用于认证和授权。<Valve>: 定义请求处理过程中的阀门,可以拦截或处理请求。
1. <server>
<Server>元素是Tomcat配置文件server.xml中的根元素,它包含了整个Tomcat服务器的配置信息。以下是一些具体的业务场景和相应的<Server>配置示例:
场景1:开发环境
在开发环境中,我们通常希望Tomcat服务器能够快速重启以便于开发和测试。因此,可以配置较短的JVM暂停时间,以便在发生错误时快速响应。
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener className="org.apache.catalina.startup.ContextConfig" />
<Listener className="org.apache.catalina.startup.UserDataConfig" />
<GlobalNamingResources>
<!-- 配置资源 -->
</GlobalNamingResources>
</Server>
场景2:生产环境
在生产环境中,稳定性和安全性是首要考虑的因素。因此,可能需要配置更长的JVM暂停时间来减少重启次数,同时配置SSL证书以支持HTTPS。
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<!-- 其他监听器配置 -->
<GlobalNamingResources>
<!-- 配置SSL证书 -->
<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>
<!-- 配置SSL连接器 -->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="/path/to/keystore.jks" keystorePass="password" />
</Server>
场景3:负载均衡
如果Tomcat服务器作为负载均衡集群的一部分,可能需要配置特定的端口用于集群通信,例如使用Tomcat的集群部署协议。
<Server port="8005" shutdown="SHUTDOWN">
<!-- 配置集群监听器 -->
<Listener className="org.apache.catalina.ha.session.JvmRouteBinderListener" />
<GlobalNamingResources>
<!-- 配置集群相关资源 -->
</GlobalNamingResources>
<!-- 配置服务和引擎 -->
<Service name="CatalinaCluster">
<Engine name="clusterEngine" defaultHost="localhost" jvmRoute="jvm1">
<!-- 配置Connector和Host -->
</Engine>
</Service>
</Server>
场景4:多实例部署
在需要在同一台服务器上部署多个Tomcat实例的场景中,可以为每个实例配置不同的<Server>端口。
<Server port="8006" shutdown="SHUTDOWN">
<!-- 配置第一个Tomcat实例的监听器和资源 -->
</Server>
<Server port="8007" shutdown="SHUTDOWN">
<!-- 配置第二个Tomcat实例的监听器和资源 -->
</Server>
2. <Service>
<Service>元素在Tomcat的server.xml配置文件中定义了一个服务,它将一个或多个连接器(<Connector>)与一个引擎(<Engine>)关联起来。以下是根据不同业务场景的<Service>配置示例:
场景1:单实例应用
对于大多数基本应用,您可能只需要一个服务实例来处理所有的HTTP请求。以下是一个基本的<Service>配置:
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<!-- 其他配置,如Host等 -->
</Engine>
</Service>
场景2:支持SSL的HTTPS服务
如果您的应用需要通过HTTPS提供安全连接,您需要配置一个支持SSL的<Connector>:
<Service name="Catalina">
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
keystoreFile="/path/to/your.keystore"
keystorePass="your_keystore_password"
scheme="https" secure="true" />
<Engine name="Catalina" defaultHost="localhost">
<!-- 其他配置 -->
</Engine>
</Service>
场景3:负载均衡
在负载均衡场景中,您可能需要多个服务实例来处理请求。每个服务可以绑定到不同的端口,并配置为处理不同类型的请求:
<Service name="CatalinaCluster">
<Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" />
<Engine name="Catalina" defaultHost="loadbalancer" jvmRoute="node1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" />
<Host name="loadbalancer" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- 负载均衡器的配置 -->
</Host>
</Engine>
</Service>
场景4:多个Web应用
如果您需要在同一台服务器上运行多个Web应用,可以为每个应用配置不同的<Service>:
<Service name="Catalina1">
<Connector port="8081" protocol="HTTP/1.1" />
<Engine name="Catalina1" defaultHost="app1.example.com">
<Host name="app1.example.com" appBase="webapp1" unpackWARs="true" autoDeploy="true">
<!-- 应用1的配置 -->
</Host>
</Engine>
</Service>
<Service name="Catalina2">
<Connector port="8082" protocol="HTTP/1.1" />
<Engine name="Catalina2" defaultHost="app2.example.com">
<Host name="app2.example.com" appBase="webapp2" unpackWARs="true" autoDeploy="true">
<!-- 应用2的配置 -->
</Host>
</Engine>
</Service>
场景5:高可用性配置
在需要高可用性的业务场景中,可以配置多个服务实例,每个实例运行在不同的端口上,并通过集群管理器进行管理:
<Service name="CatalinaHA">
<Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" />
<Engine name="Catalina" defaultHost="app.example.com" jvmRoute="node1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
<Channel className="org.apache.catalina.ha.tcp.ReplicationChannel">
<Member className="org.apache.catalina.ha.tcp.ReplicationMember"
host="node2"
port="4000" />
</Channel>
</Cluster>
<Host name="app.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- 高可用性应用的配置 -->
</Host>
</Engine>
</Service>
3. <Connector>
<Connector>元素在Tomcat的server.xml配置文件中定义了服务器的网络连接参数,它用于处理客户端的HTTP请求。以下是根据不同业务场景的<Connector>配置示例:
场景1:HTTP服务
对于基本的HTTP服务,您需要配置一个标准的HTTP连接器:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
port: 设置HTTP服务监听的端口。protocol: 指定使用的协议,这里使用Tomcat的HTTP/1.1处理器。connectionTimeout: 请求超时时间(毫秒)。redirectPort: 当客户端使用HTTP请求时,重定向到的HTTPS端口。
场景2:HTTPS服务
如果您的应用需要通过HTTPS提供加密连接,您需要配置一个支持SSL的连接器:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
scheme="https" secure="true"
SSLEnabled="true"
keystoreFile="conf/keystore.jks"
keystorePass="changeit" />
scheme: 设置为https表示使用安全的连接。secure: 设置为true表示请求需要安全连接。SSLEnabled: 设置为true以启用SSL。keystoreFile: 指定包含SSL证书的密钥库文件路径。keystorePass: 密钥库的密码。
场景3:性能优化
对于需要处理大量并发请求的应用,可以配置NIO(非阻塞I/O)或NIO2的连接器来提高性能:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
maxThreads="150" minSpareThreads="25"
acceptCount="100" />
maxThreads: 最大工作线程数。minSpareThreads: 保持运行的最小空闲线程数。acceptCount: 可以接受的请求队列长度。
场景4:限制请求大小
为了防止服务器被大文件上传拖慢,可以限制请求的最大大小:
<Connector port="8080" protocol="HTTP/1.1"
maxPostSize="20971520" />
maxPostSize: 最大POST请求大小,这里设置为20MB。
场景5:启用GZIP压缩
为了减少网络传输的数据量,可以配置连接器以启用GZIP压缩:
<Connector port="8080" protocol="HTTP/1.1"
compression="on"
compressionMinSize="2048"
noCompressionUserAgent="gozilla, traviata" />
compression: 设置为on以启用压缩。compressionMinSize: 启用压缩的请求最小大小(字节)。noCompressionUserAgent: 不应用压缩的浏览器列表。
场景6:配置代理设置
如果您的Tomcat服务器位于一个或多个代理之后,您可能需要配置连接器以正确处理请求头:
<Connector port="8080" protocol="HTTP/1.1"
proxyName="www.example.com"
proxyPort="80"
scheme="http"
secure="false" />
proxyName: 代理服务器的主机名。proxyPort: 代理服务器监听的端口。
4. <Engine>
<Engine>元素在Tomcat的server.xml配置文件中代表了一个请求引擎,它负责接收<Service>中的<Connector>转发的请求,并将请求路由到相应的<Host>或<Context>。以下是根据不同业务场景的<Engine>配置示例:
场景1:基本Web应用路由
对于基本的Web应用部署,您可能只需要将请求路由到默认的虚拟主机:
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm" />
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- 可以包含具体的<Context>元素定义 -->
</Host>
</Engine>
name: 引擎的名称,通常与<Service>元素的名称相匹配。defaultHost: 请求无法匹配到任何<Host>时使用的默认主机名。
场景2:部署多个虚拟主机
如果您需要在同一台服务器上部署多个虚拟主机,可以在同一个<Engine>下配置多个<Host>:
<Engine name="Catalina" defaultHost="default">
<Host name="app1.example.com" appBase="webapps/app1" unpackWARs="true" autoDeploy="true">
<!-- 应用1的配置 -->
</Host>
<Host name="app2.example.com" appBase="webapps/app2" unpackWARs="true" autoDeploy="true">
<!-- 应用2的配置 -->
</Host>
</Engine>
场景3:集群部署
在需要高可用性的集群部署场景中,可以配置集群管理器来同步会话信息:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
<Channel className="org.apache.catalina.ha.tcp.ReplicationChannel">
<Member className="org.apache.catalina.ha.tcp.ReplicationMember"
host="node2"
port="4000" />
</Channel>
</Cluster>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- 主机配置 -->
</Host>
</Engine>
jvmRoute: 当前实例的JVM路由标识,用于集群中的会话查找。
场景4:自定义请求过滤器
如果您需要对所有请求应用自定义过滤器,可以在<Engine>下配置<Valve>:
<Engine name="Catalina" defaultHost="localhost">
<Valve className="com.example.MyCustomRequestFilter" />
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- 主机配置 -->
</Host>
</Engine>
className: 指定自定义过滤器的完整类名。
场景5:访问日志配置
为了记录所有请求的访问日志,可以在<Engine>下配置访问日志阀:
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm" />
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- 主机配置 -->
</Host>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="access_log." suffix=".txt" pattern="common" rotate="true" />
</Engine>
directory: 访问日志文件存储的目录。prefix和suffix: 日志文件的前缀和后缀。pattern: 日志记录的格式。rotate: 是否启用日志轮转。
5. <Host>
<Host>元素在Tomcat的server.xml配置文件中配置了一个虚拟主机,它处理指向特定主机名或IP地址的请求。以下是根据不同业务场景的<Host>配置示例:
场景1:单个应用的虚拟主机
对于单个应用的部署,您可以配置一个虚拟主机,所有请求都会映射到这个应用:
<Host name="myapp.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- 应用的Context配置可以在这里添加,或者在单独的XML文件中配置 -->
</Host>
name: 虚拟主机的名称,通常是应用的域名。
场景2:多个应用的虚拟主机
如果您希望一个虚拟主机管理多个应用,可以在<Host>下配置多个<Context>:
<Host name="multiapp.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="/app1" docBase="app1" />
<Context path="/app2" docBase="app2" />
<!-- 更多应用的Context配置 -->
</Host>
path: Web应用的路径。docBase: Web应用的文档基础路径或WAR文件名。
场景3:使用外部定义的Context
在复杂的部署场景中,您可能希望将<Context>配置在外部XML文件中,以保持server.xml的清晰:
<Host name="externalctx.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="external" reloadable="true" />
<!-- 其他Context配置 -->
</Host>
<Context>的path可以留空,表示应用的根路径。docBase可以指向包含context.xml文件的目录。
场景4:配置别名
如果您希望虚拟主机响应多个域名,可以使用<Alias>元素:
<Host name="alias.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Alias>www.alias.com</Alias>
<!-- 应用的Context配置 -->
</Host>
<Alias>: 虚拟主机的另一个域名。
场景5:配置SSL
对于需要SSL加密的虚拟主机,可以配置一个SSL连接器,并在<Host>中指定SSL相关属性:
<Host name="secure.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true"
sslProtocol="TLS" sslCertificateFile="/path/to/certificate.cer"
sslCertificateKeyFile="/path/to/key.key" sslPort="8443">
<!-- 应用的Context配置 -->
</Host>
sslProtocol: 使用的SSL协议。sslCertificateFile和sslCertificateKeyFile: SSL证书和私钥文件的路径。sslPort: SSL端口,当客户端通过这个端口访问时,将使用SSL。
场景6:禁用某些HTTP方法
出于安全考虑,您可能希望禁用某些HTTP方法:
<Host name="securemethods.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
pattern="%h %l %u %t "%r" %s %b" />
<Context>
<Valve className="org.apache.catalina.valves.MethodDisablerValve" methods="TRACE" />
</Context>
</Host>
methods: 需要禁用的HTTP方法列表。
6. <Context>
<Context>元素在Tomcat的server.xml配置文件中定义了Web应用程序的上下文。每个<Context>代表一个Web应用,包括它的路径、文档基础、会话管理和其他特定于应用的设置。以下是根据不同业务场景的<Context>配置示例:
场景1:基本Web应用部署
对于基本的Web应用部署,您需要指定应用的路径和文档基础:
<Context path="/myapp" docBase="myapp" />
path: Web应用的URL路径。docBase: Web应用的目录或WAR文件的名称。
场景2:配置外部WAR文件
如果您有一个外部WAR文件,希望部署为特定的上下文路径:
<Context path="/externalapp" docBase="/path/to/externalapp.war" />
docBase: 指向外部WAR文件的绝对路径。
场景3:使用相对路径的WAR文件
在某些情况下,您可能希望使用相对于appBase的相对路径:
<Context path="/relapp" docBase="webapps/relapp.war" />
场景4:配置会话超时
为了管理会话的生命周期,您可以设置会话超时时间(以分钟为单位):
<Context path="/myapp" docBase="myapp" sessionTimeout="30" />
场景5:启用应用的重新加载
在开发过程中,您可能希望在代码更改后自动重新加载应用:
<Context path="/devapp" docBase="devapp" reloadable="true" />
reloadable: 设置为true以启用应用的自动重新加载。
场景6:配置资源链接
如果您的应用需要连接到外部资源(如数据库),您可以配置资源链接:
<Context path="/myapp" docBase="myapp">
<ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
name="jdbc/myAppDB" />
</Context>
ResourceLink: 定义了一个资源链接,允许应用访问在<GlobalNamingResources>中定义的资源。
场景7:配置安全设置
对于需要安全认证的应用,您可以配置安全约束和角色:
<Context path="/secapp" docBase="secapp">
<SecurityConstraint>
<WebResourceCollection urlPattern="/*">
<HttpMethod constraint="POST,PUT" />
</WebResourceCollection>
<AuthConstraint>
< Role name="admin" />
</AuthConstraint>
</SecurityConstraint>
<Valve className="org.apache.catalina.authenticator.BasicAuthenticator" />
</Context>
SecurityConstraint: 定义了哪些资源需要安全保护。WebResourceCollection: 定义了受保护的URL模式和HTTP方法。AuthConstraint: 定义了允许访问的的角色。Valve: 指定了认证的类型(例如,基本认证)。
场景8:配置字符集和本地化
为了确保应用正确处理国际化内容,您可以配置字符集和本地化:
<Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
<LocaleConfig defaultLocale="en" />
<CharsetConfig>
<Charset name="UTF-8" />
</CharsetConfig>
</Context>
useHttpOnly: 设置为true以启用HttpOnly Cookies。LocaleConfig: 定义了默认地区设置。CharsetConfig: 定义了应用使用的字符集。
7. <Listener>
<Listener>元素在Tomcat的server.xml配置文件中用于注册事件监听器,这些监听器在Tomcat的生命周期事件(如启动和停止)发生时被调用。以下是根据不同业务场景的<Listener>配置示例:
场景1:自定义上下文初始化
如果您需要在Tomcat启动时执行自定义逻辑,比如初始化数据库连接池或加载应用程序特定的资源,可以定义一个自定义的上下文监听器:
<Listener className="com.example.MyContextListener" />
className: 指定自定义监听器的完整类名。
场景2:SSL证书管理
在需要动态加载或刷新SSL证书的业务场景中,可以使用自定义的证书管理监听器:
<Listener className="com.example.SSLCertLoader" />
场景3:集群会话管理
当Tomcat配置为集群模式时,可以使用特定的监听器来管理会话复制:
<Listener className="org.apache.catalina.ha.session.JvmRouteBinderListener" />
- 这个监听器是Tomcat集群会话管理的一部分,用于设置JVM路由。
场景4:请求日志记录
为了记录所有进入Tomcat的请求,可以配置请求日志监听器:
<Listener className="org.apache.catalina.core.AsyncListenerWrapper" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="access_log" suffix=".txt" pattern="common" resolveHosts="false" />
AccessLogValve: 用于记录访问日志的监听器,可以设置日志的目录、前缀、后缀和日志模式。
场景5:性能监控
为了监控Tomcat的性能,可以添加性能监控监听器:
<Listener className="com.example.PerformanceMonitor" />
场景6:Tomcat资源管理
Tomcat的资源管理监听器可以用于跟踪和管理JNDI资源:
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
场景7:自定义用户数据管理
如果您需要在Tomcat启动或停止时加载或保存用户数据,可以定义一个自定义的用户数据管理监听器:
<Listener className="com.example.UserDataManager" />
场景8:Tomcat安全监听器
Tomcat提供了一些内置的安全监听器,用于在启动和停止时进行安全相关的初始化和清理:
<Listener className="org.apache.catalina.authenticator.AuthenticatorBase" />
8. <Realm>
<Realm>元素在Tomcat的server.xml配置文件中定义了安全域,它负责处理用户认证和授权。以下是根据不同业务场景的<Realm>配置示例:
场景1:使用内存认证
在开发环境中,您可能希望使用内存中的用户和角色列表进行认证:
<Realm className="org.apache.catalina.realm.MemoryRealm" />
场景2:使用JDBC数据库认证
对于生产环境,您可能需要使用数据库存储用户信息和角色信息:
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/tomcatdb"
dataSourceName="java:comp/env/jdbc/tomcatDataSource"
userTable="users" userCredColumn="password" userNameColumn="username" />
driverName: JDBC驱动的类名。connectionURL: 数据库连接URL。dataSourceName: JNDI资源名称,用于查找数据源。userTable: 存储用户信息的数据库表。userCredColumn: 存储密码的列。userNameColumn: 存储用户名的列。
场景3:使用JAAS认证
如果您的应用需要使用Java Authentication and Authorization Service (JAAS),可以配置JAAS认证:
<Realm className="org.apache.catalina.realm.JAASRealm"
appName="myApp" />
appName: JAAS应用的名称。
场景4:使用LDAP认证
当用户信息存储在LDAP服务器时,可以使用LDAP认证:
<Realm className="org.apache.catalina.realm.JNDIRealm"
userPattern="uid={0},ou=people,dc=example,dc=com"
connectionName="uid=admin,ou=people,dc=example,dc=com"
connectionPassword="adminpassword"
url="ldap://ldap.example.com:389/" />
userPattern: LDAP中用户信息的搜索模式。connectionName: 连接LDAP服务器的用户名。connectionPassword: 连接LDAP服务器的密码。url: LDAP服务器的URL。
场景5:使用自定义Realm
如果您有特殊的认证需求,可以创建自定义的Realm实现:
<Realm className="com.example.MyCustomRealm" />
场景6:结合多个Realm使用
在某些业务场景中,您可能需要结合多个Realm进行认证,例如,首先尝试使用内存认证,如果失败再尝试使用数据库认证:
<Realm className="org.apache.catalina.realm.CombinedRealm">
<Realm className="org.apache.catalina.realm.MemoryRealm" />
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="..."
connectionURL="..."
userTable="..."
userCredColumn="..."
userNameColumn="..." />
</Realm>
CombinedRealm: 组合多个Realm的认证器。
场景7:使用容器管理的Realm
如果您使用Tomcat在应用服务器(如GlassFish或JBoss)中,可能需要使用容器管理的Realm:
<Realm className="org.apache.catalina.realm.ContainerRealm"
ignoreEmptyPassword="true" />
ignoreEmptyPassword: 是否忽略空密码。
9. <Valve>
<Valve>元素在Tomcat的server.xml配置文件中用于插入自定义的处理逻辑,这些处理逻辑可以在请求处理管道的不同阶段执行。以下是根据不同业务场景的<Valve>配置示例:
场景1:访问日志记录
记录每个请求的详细日志信息,这对于分析流量和调试应用非常有用:
<Valve className="org.apache.catalina.valves.AccessLogValve"
pattern="%h %l %u %t "%r" %s %b" />
pattern: 定义日志的格式,%h,%l,%u,%t,%r,%s,%b分别代表主机名、登录名、用户ID、时间、请求行、状态码和字节数。
场景2:请求响应时间记录
监控每个请求的响应时间,以评估应用性能:
<Valve className="org.apache.catalina.valves.RequestDumpValve" />
场景3:请求过滤
过滤特定的请求,例如禁用或限制某些HTTP方法:
<Valve className="org.apache.catalina.valves.MethodDisablerValve" methods="TRACE" />
methods: 指定要禁用的HTTP方法列表。
场景4:静态资源缓存
为静态资源设置缓存头,以提高响应速度和减少服务器负载:
<Valve className="org.apache.catalina.valves.StaticResourcesValve"
cache="maxSize=100000,ttl=3600" />
cache: 定义缓存的大小和时间(TTL)。
场景5:SSL认证
强制所有请求都使用SSL连接,增强应用安全性:
<Valve className="org.apache.catalina.valves.SSLValve" keystoreFile="/path/to/keystore.jks" keystorePass="password" />
keystoreFile: 密钥库文件的路径。keystorePass: 密钥库的密码。
场景6:请求重写
根据特定规则重写请求URI,用于URL重定向或重写:
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
场景7:自定义请求处理
执行自定义的请求处理逻辑,例如用户请求的预处理或后处理:
<Valve className="com.example.MyCustomRequestValve" />
场景8:会话管理
自定义会话管理逻辑,例如会话超时处理或会话持久化:
<Valve className="org.apache.catalina.valves.SessionValve" />
场景9:错误页面定制
自定义错误页面的响应,例如为不同的HTTP状态码定义不同的错误页面:
<Valve className="org.apache.catalina.valves.ErrorReportValve"
showReport="false" showServerInfo="false" />
showReport: 是否显示详细的错误报告。showServerInfo: 是否显示服务器信息。
最后
以上是 server.xml 文件中重要的配置项,在项目应用中,不同的场景配置也不同,以上供你参考,如果你愿意分享你在项目中的配置场景案例,欢迎评论区见,卷的时代,兄弟们一起搀扶前行。
Tomcat的配置文件中有哪些关键的配置项,它们分别有什么作用?的更多相关文章
- Java【tomcat】配置文件
Tomcat(二):tomcat配置文件server.xml详解和部署简介 分类: 网站架构 本文原创地址在博客园:https://www.cnblogs.com/f-ck-need-u/p/ ...
- Tomcat的配置文件详解
Tomcat的配置文件详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Tomcat的配置文件 Tomcat的配置文件默认存放在$CATALINA_HOME/conf目录中, ...
- tomcat的配置文件server.conf中的元素的理解
tomcat的配置文件server.conf中的元素的理解 tomcat作为一个servlet服务器本身的配置文件是tomcat_home/conf/server.conf,这个配置文件中有很多元素, ...
- 启动eclipse导致Tomcat的配置文件重置
转: 启动eclipse导致Tomcat的配置文件重置 导入一个项目,需要在Tomcat的配置文件中配置JNDI数据源,需要修改Tomcat下的server.xml文件.但是当我们修改完后重启Tomc ...
- SpringBoot学习遇到的问题(1) - 配置文件有日志的debug模式等配置项,为什么不起作用
这个问题困扰我近乎两天,通过查找N多资料后终于解决,写下来共享给大家. logging.level.root=DEBUG ... 一系列的日志配置项,都不起作用的原因是springboot启动加载不到 ...
- spring boot配置文件中 spring.mvc.static-path-pattern 配置项
spring boot项目中的静态资源文件存放在static文件下面,当通过浏览器访问这些静态文件时,发现必须要添加static作为前缀才能访问,折腾了一番后发现,这个前缀跟 spring.mvc.s ...
- 关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)
一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...
- 【转】关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)
一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...
- tomcat 的配置文件server.xml 几个端口的作用
tomcat中server.xml配置文件中几个port的作用和区别 在tomcat的server.xml中有这么几个port,很多人虽然一直在使用tomcat,但是却不知道这几个port各有什么作用 ...
- tomcat 的配置文件 server.xml 详解
server.xml位于$TOMCAT_HOME/conf目录下,作为整个 tomcat 服务器最核心的配置文件,server.xml的每一个元素都对应了 tomcat中的一个组件,通过对xml中元素 ...
随机推荐
- 微服务上云Dockerfile编写,如何上云时将生产环境和开发环境分离并正确书写自定义启动命令
点击查看代码 FROM openjdk:8-jdk LABEL maintainer=yao #docker run -e PARAMS="--server.port 9090" ...
- Linux 特权 SUID/SGID 的详解
导航 0 前言 1 权限匹配流程 2 五种身份变化 3 有效用户/组 4 特权对 Shell 脚本无效 5 Sudo 与 SUID/SGID 的优先级 6 SUID.SGID.Sticky 各自的功能 ...
- 请查收“国产化率认证报告”(100%)——RK3568J工业核心板
创龙科技RK3568J核心板获得"100%国产化"认证日前,创龙科技"国产化率100%认证"的核心板再添一员!RK3568J工业核心板(SOM-TL3568)获 ...
- .Net Core WebAPI Swagger Failed to load API definition
1.错误现象 1.1.写完一个测试API,Ctrl+F5运行,提示错误: Failed to load API definition.(如下图) 1.2.点击 http://localhost:516 ...
- pymsql往数据库插入表情报错
修改数据库 需要数据库支持utf8mb4 修改/etc/my.conf [client] default-character-set = utf8mb4 [mysql] default-charact ...
- Java权限认证框架比较
认证.授权.鉴权和权限控制 定义 英文 实现方式 认证 确认声明者的身份 identification 根据声明者独特的识别信息 授权 获取用户的委派权限 authorization 颁发一个授信媒介 ...
- VUE商城项目 -商品分类功能 - 手稿
- dubbo面试题及答案
Dubbo是什么? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目. 面试官问你如果这个都不清楚,那下面的就没必要问了. 官网:ht ...
- c++临时对象导致的生命周期问题
对象的生命周期是c++中非常重要的概念,它直接决定了你的程序是否正确以及是否存在安全问题. 今天要说的临时变量导致的生命周期问题是非常常见的,很多时候没有一定经验甚至没法识别出来.光是我自己写.rev ...
- VirtualBox Ubuntu 22.04 Server联网、与主机互联
使用 VirtualBox 7.0安装了两个Ubuntu 22.04 Server虚拟机,想要实现: 主机与虚拟机互联 虚拟机之间互联,且互联的IP应为静态 虚拟机可以联网 解决方法 每个虚拟机配置两 ...