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 文件中重要的配置項,在項目應用中,不同的場景配置也不同,以上供你參考,如果你願意分享你在項目中的配置場景案例,歡迎評論區見,卷的時代,兄弟們一起攙扶前行。