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