1. 程式人生 > 實用技巧 >tomcat server.xml 配置檔案詳解

tomcat server.xml 配置檔案詳解

配置檔案路徑/opt/tomcat/conf/server.xml

###########################

Apache 跟tomcat相關的配置(供參考)

ProxyPass /admin balancer://admincluster/admin lbmethod=byrequests

ProxyPass /dmap balancer://admincluster/dmap lbmethod=byrequests

ProxyPassReverse /admin balancer://admincluster/admin

ProxyPassReverse /dmap balancer://admincluster/dmap


<Proxy balancer://admincluster>

BalancerMember ajp://172.21.3.21:8009 route=tomcat1 loadfactor=1 retry=10 timeout=180

BalancerMember ajp://172.21.4.21:8009 route=tomcat2 loadfactor=1 retry=10 timeout=180

ProxySet stickysession=JSESSIONID
</Proxy>

#########################################

Tomcat Configure

<?xml version='1.0' encoding='utf-8'?>

<Server port="8006" shutdown="SHUTDOWN">

監聽器

<Listener className="org.apache.catalina.startup.VersionLoggerListener" />

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

<GlobalNamingResources>

•VersionLoggerListener:當Tomcat啟動時,該監聽器記錄Tomcat、Java和作業系統的資訊。該監聽器必須是配置的第一個監聽器。

•AprLifecycleListener:Tomcat啟動時,檢查APR庫,如果存在則載入。APR,即Apache Portable Runtime,是Apache可移植執行庫,可以實現高可擴充套件性、高效能,以及與本地伺服器技術更好的整合。

•JasperListener:在Web應用啟動之前初始化Jasper,Jasper是JSP引擎,把JVM不認識的JSP檔案解析成java檔案,然後編譯成class檔案供JVM使用。

•JreMemoryLeakPreventionListener:與類載入器導致的記憶體洩露有關。

•GlobalResourcesLifecycleListener:通過該監聽器,初始化< GlobalNamingResources>標籤中定義的全域性JNDI資源;如果沒有該監聽器,任何全域性資源都不能使用。< GlobalNamingResources>

•ThreadLocalLeakPreventionListener:當Web應用因thread-local導致的記憶體洩露而要停止時,該監聽器會觸發執行緒池中執行緒的更新。當執行緒執行完任務被收回執行緒池時,活躍執行緒會一個一個的更新。只有當Web應用(即Context元素)的renewThreadsWhenStoppingContext屬性設定為true時,該監聽器才有效。

<Resource name="UserDatabase" auth="Container"

type="org.apache.catalina.UserDatabase"

description="User database"

factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

pathname="conf/tomcat-users.xml" />

</GlobalNamingResources>

GlobalNamingResources元素定義了全域性資源,,該配置是通過讀取$TOMCAT_HOME/ conf/tomcat-users.xml實現的。

<Service name="china-admin">

配置http聯結器

<Connector port="8180" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" #強制重定向埠到8443

server="Null"/>

配置AJP聯結器

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

<Engine name="Catalina" defaultHost="china-admin" jvmRoute="tomcat1">

#defaultHost的值,必須與Engine中的一個Host元件的name屬性值匹配

TOMCAT叢集配置

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

channelSendOptions="6" channelStartOptions="3">

定義叢集節點,以及節點間的同步方式

className-指定Cluster使用的類

channelSendOptions-Cluster傳送訊息的方式

channelSendOptions可以設定為2、4、8、10,每個數字代表一種方式

2 = Channel.SEND_OPTIONS_USE_ACK(確認傳送)

4 = Channel.SEND_OPTIONS_SYNCHRONIZED_ACK(同步傳送)

8 = Channel.SEND_OPTIONS_ASYNCHRONOUS(非同步傳送)

<Manager className="org.apache.catalina.ha.session.BackupManager"

expireSessionsOnShutdown="false"

notifyListenersOnReplication="true"

mapSendOptions="6"/>

Manager決定如何管理叢集的Session資訊。Tomcat提供了兩種Manager:BackupManager和DeltaManager

BackupManager-叢集下的所有Session,將放到一個備份節點。叢集下的所有節點都可以訪問此備份節點

DeltaManager-叢集下某一節點生成、改動的Session,將複製到其他節點。

DeltaManager是Tomcat預設的叢集Manager,能滿足一般的開發需求

使用DeltaManager,每個節點部署的應用要一樣;使用BackupManager,每個節點部署的應用可以不一樣.

className-指定實現org.apache.catalina.ha.ClusterManager介面的類,資訊之間的管理.

expireSessionsOnShutdown-設定為true時,一個節點關閉,將導致叢集下的所有Session失效

notifyListenersOnReplication-叢集下節點間的Session複製、刪除操作,是否通知session listeners

maxInactiveInterval-叢集下Session的有效時間(單位:s)。

maxInactiveInterval內未活動的Session,將被Tomcat回收。預設值為1800(30min)

mapSendOptions 備份管理器使用複製的對映,此對映正在傳送和接收訊息。您可以設定此對映如何傳送訊息的標誌,預設值為6(同步)。

注意,如果使用非同步訊息傳遞,則接收節點可以按照與傳送會話的順序不同的順序處理會話的更新訊息

<Channel className="org.apache.catalina.tribes.group.GroupChannel">

Channel是Tomcat節點之間進行通訊的工具。Channel包括下述的5個元件:Membership、Sender、Transport、Receiver、Interceptor

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="auto"

port="4000"

autoBind="100"

selectorTimeout="5000"

maxThreads="6"/>

Receiver

接收器,負責接收訊息

接收器分為兩種:BioReceiver(阻塞式)、NioReceiver(非阻塞式)

常用屬性:

className-指定Receiver使用的類

address-接收訊息的地址

port-接收訊息的埠

autoBind-埠的變化區間

如果port為4000,autoBind為100,接收器將在4000-4099間取一個埠,進行監聽

selectorTimeout-NioReceiver內輪詢的超時時間

maxThreads-執行緒池的最大執行緒數

<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

</Sender>

Sender內嵌了Transport元件,Transport真正負責傳送訊息

Transport分為兩種:bio.PooledMultiSender(阻塞式)、nio.PooledParallelSender(非阻塞式)

阻塞式:可以將一次將多個資訊併發傳送至其它節點,但一次只能傳送給一個節點

非阻塞式:可以一次傳送多個資訊至一個或多個節點

<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor"/>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">

Interceptor : Cluster的攔截器

TcpFailureDetector-網路、系統比較繁忙時,Membership可能無法及時更新可用節點列表,

此時TcpFailureDetector可以攔截到某個節點關閉的資訊,

並嘗試通過TCP連線到此節點,以確保此節點真正關閉,從而更新叢集可以用節點列

TcpPingInterceptor:ping攔截

StaticMembershipInterceptor 靜態成員攔截,可定義StaticMembership,對該成員攔截

<Member className="org.apache.catalina.tribes.membership.StaticMember"

host="172.21.3.21"

port="4000"

securePort="-1"

uniqueId="{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}"/>

<Member className="org.apache.catalina.tribes.membership.StaticMember"

host="172.21.4.21"

port="4000"

securePort="-1"

uniqueId="{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2}"/>

Membership維護叢集的可用節點列表。它可以檢查到新增的節點,也可以檢查到沒有心跳的節點

className-指定Membership使用的類

address-組播地址

port-組播埠

frequency-傳送心跳(向組播地址傳送UDP資料包)的時間間隔(單位:ms)。預設值為500

dropTime-Membership在dropTime(單位:ms)內未收到某一節點的心跳,則將該節點從可用節點列表刪除。預設值為3000

注: 組播(Multicast):一個傳送者和多個接收者之間實現一對多的網路連線。

一個傳送者同時給多個接收者傳輸相同的資料,只需複製一份相同的資料包。

它提高了資料傳送效率,減少了骨幹網路出現擁塞的可能性

相同組播地址、埠的Tomcat節點,可以組成叢集下的子叢集

</Interceptor>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

</Channel>

<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

在節點失效後,使用mod_jk模組來處理 tomcatjvmroute接管。 節點崩潰後,隨後的請求將轉到其他叢集節點。 這會導致效能下降。 當在備份節點上啟用此閥門並看到一個請求時,它將重寫cookiejsesinid資訊,以使用這個響應請求的備份群集節點的路由。 響應傳遞到客戶端後,所有後續的客戶端請求將直接傳送到備份節點。 會話ID的更改也傳送到所有其他群集節點。 之後,會話粘固性將直接工作到備份節點,在重新啟動後,流量不會返回到失敗的節點!

<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

filter=""/>

該閥門記錄指定請求(處理前)和相應響應(處理後)的內容。 它在除錯與headers和Cookie相關的問題時尤其有用。

根據希望執行的日誌的粒度,此閥門可以連線到任何容器。

</Cluster>

<Realm className="org.apache.catalina.realm.LockOutRealm">

<Realm className="org.apache.catalina.realm.UserDatabaseRealm"

resourceName="UserDatabase" digest="sha-256"/>

</Realm>

Realm,可以把它理解成“域”;Realm提供了一種使用者密碼與web應用的對映關係,從而達到角色安全管理的作用。在本例中,Realm的配置使用name為UserDatabase的資源實現

<Host name="china-admin" appBase="china-admin/target/"

unpackWARs="true" autoDeploy="true">

name屬性指定虛擬主機的主機名,一個Engine中有且僅有一個Host元件的name屬性與Engine元件的defaultHost屬性相匹配;一般情況下,主機名需要是在DNS伺服器中註冊的網路名,但是Engine指定的defaultHost不需要,原因在前面已經說明。

unpackWARs指定了是否將代表Web應用的WAR檔案解壓;如果為true,通過解壓後的檔案結構執行該Web應用,如果為false,直接使用WAR檔案執行Web應用。

Host的autoDeploy和appBase屬性,與Host內Web應用的自動部署有關;沒有出現的xmlBase和deployOnStartup屬性,也與Web應用的自動部署有關

autoDeploy為true時,Tomcat在執行時定期檢查新的Web應用或Web應用的更新

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="china-admin_access_log" suffix=".txt"

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

AccessLogValve的作用是通過日誌記錄其所在的容器中處理的所有請求,在本例中,Valve放在Host下,便可以記錄該Host處理的所有請求。AccessLogValve記錄的日誌就是訪問日誌,每天的請求會寫到一個日誌檔案裡。AccessLogValve可以與Engine、Host或Context關聯;在本例中,只有一個Engine,Engine下只有一個Host,Host下只有一個Context,因此AccessLogValve放在三個容器下的作用其實是類似的。

本例的AccessLogValve屬性的配置,使用的是預設的配置;下面介紹AccessLogValve中各個屬性的作用:

(1)className:規定了Valve的型別,是最重要的屬性;本例中,通過該屬性規定了這是一個AccessLogValve。

(2)directory:指定日誌儲存的位置,本例中,日誌儲存在$TOMCAT_HOME/logs目錄下。

(3)prefix:指定了日誌檔案的字首。

(4)suffix:指定了日誌檔案的字尾。通過directory、prefix和suffix的配置,在$TOMCAT_HOME/logs目錄下,可以看到如下所示的日誌檔案。

(5)pattern:指定記錄日誌的格式,本例中各項的含義如下:

%h:遠端主機名或IP地址;如果有nginx等反向代理伺服器進行請求分發,該主機名/IP地址代表的是nginx,否則代表的是客戶端。後面遠端的含義與之類似,不再解釋。

%l:遠端邏輯使用者名稱,一律是”-”,可以忽略。

%u:授權的遠端使用者名稱,如果沒有,則是”-”。

%t:訪問的時間。

%r:請求的第一行,即請求方法(get/post等)、uri、及協議。

%s:響應狀態,200,404等等。

%b:響應的資料量,不包括請求頭,如果為0,則是””-。

pattern的配置中,除了上述各項,還有一個非常常用的選項是%D,含義是請求處理的時間(單位是毫秒),對於統計分析請求的處理速度幫助很大。

<Context path="/admin" docBase="admin" reloadbale="true" >

1、path:即要建立的虛擬目錄,,注意是/admin,它指定訪問Web應用的 上下文根,如http://localhost:8080/admin/****

2、docBase:為應用程式的路徑或WAR檔案存放的路徑 ,可以是絕對路徑 ,也可是相對路徑,相對路徑是相對於<Host >

3、reloadable:如果這個屬性設為true,Tomcat伺服器在執行狀態下會監視在WEB-INF/classes和Web-INF/lib目錄CLASS檔案的改變,如果監視到有class檔案被更新,伺服器自動重新載入Web應用,這樣我們可以在不重起tomcat的情況下改變應用程式

一個Host元素中巢狀任意多的Context元素。每個Context的路徑必須是惟一的,由path屬性定義。另外,你必須定義一個path=“”的context,這個Context稱為該虛擬主機的預設web應用,用來處理那些不能匹配任何Context的Context路徑的請求。

在/conf/context.xml中進行獨立的配置。因為 server.xml 是不可動態重載入的資源,伺服器一旦啟動了以後,要修改這個檔案,就得重啟伺服器才能重新載入。而 context.xml 檔案則不然, tomcat 伺服器會定時去掃描這個檔案。一旦發現檔案被修改(時間戳改變了),就會自動重新載入這個檔案,而不需要重啟伺服器

</Host>

</Engine>

</Service>

</Server>

參考:

https://images0.cnblogs.com/i/608242/201403/271101403905846.jpg

Tomcat的配置

  • Server 元素表示整個 Catalina servlet 容器。
  • Service元素表示一個或多個聯結器元件的組合,這些元件共享一個用於處理傳入請求的引擎元件。Server 中可以有多個 Service。
  • Executor表示可以在Tomcat中的元件之間共享的執行緒池。
  • Connector代表連線元件。Tomcat 支援三種協議:HTTP/1.1、HTTP/2.0、AJP。
  • Context元素表示一個Web應用程式,它在特定的虛擬主機中執行。每個Web應用程式都基於Web應用程式存檔(WAR)檔案,或者包含相應的解包內容的相應目錄,如Servlet規範述。
  • Engine元素表示與特定的Catalina服務相關聯的整個請求處理機器。它接收並處理來自一個或多個聯結器的所有請求,並將完成的響應返回給聯結器,以便最終傳輸回客戶端。
  • Host元素表示一個虛擬主機,它是一個伺服器的網路名稱(如“www.mycompany.com”)與執行Tomcat的特定伺服器的關聯。