1. 程式人生 > >Tmocat的service.xml配置文件詳解(含中文翻譯)

Tmocat的service.xml配置文件詳解(含中文翻譯)

bean ssl eth call 項目 redirect 類型 describe update

Tmocat的service.xml配置文件
英文原版 中文手譯
<?xml version=‘1.0‘ encoding=‘utf-8‘?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!--################Server################################--> <!-- Note: A "Server" is not itself a "Container", so you may not define subcomponents such as "Valves" at this level. Documentation at /docs/config/server.html --> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <!-- Security listener. Documentation at /docs/config/listeners.html <Listener className="org.apache.catalina.security.SecurityListener" /> --> <!--APR library loader. Documentation at /docs/apr.html --> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!-- Prevent memory leaks due to use of particular java/javax APIs--> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <!-- Global JNDI resources Documentation at /docs/jndi-resources-howto.html --> <GlobalNamingResources> <!-- Editable user database that can also be used by UserDatabaseRealm to authenticate users --> <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> <!--#################Service###############################--> <!-- A "Service" is a collection of one or more "Connectors" that share a single "Container" Note: A "Service" is not itself a "Container", so you may not define subcomponents such as "Valves" at this level. Documentation at /docs/config/service.html --> <Service name="Catalina"> <!--The connectors can use a shared executor, you can define one or more named thread pools--> <!-- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/> --> <!--#################Connector###############################--> <!-- A "Connector" represents an endpoint by which requests are received and responses are returned. Documentation at : Java HTTP Connector: /docs/config/http.html (blocking & non-blocking) Java AJP Connector: /docs/config/ajp.html APR (HTTP/AJP) Connector: /docs/apr.html Define a non-SSL/TLS HTTP/1.1 Connector on port 8080 --> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URLEncoding="utf-8"/> <!-- A "Connector" using the shared thread pool--> <!-- <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 This connector uses the NIO implementation that requires the JSSE style configuration. When using the APR/native implementation, the OpenSSL style configuration is required as described in the APR/native documentation --> <!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> --> <!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <!--##############Engine##################################--> <!-- An Engine represents the entry point (within Catalina) that processes every request. The Engine implementation for Tomcat stand alone analyzes the HTTP headers included with the request, and passes them on to the appropriate Host (virtual host). Documentation at /docs/config/engine.html --> <!-- You should set jvmRoute to support load-balancing via AJP ie : <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> --> <Engine name="Catalina" defaultHost="localhost"> <!--For clustering, please take a look at documentation at: /docs/cluster-howto.html (simple how to) /docs/config/cluster.html (reference documentation) --> <!-- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> --> <!-- Use the LockOutRealm to prevent attempts to guess user passwords via a brute-force attack --> <Realm className="org.apache.catalina.realm.LockOutRealm"> <!-- This Realm uses the UserDatabase configured in the global JNDI resources under the key "UserDatabase". Any edits that are performed against this UserDatabase are immediately available for use by the Realm. --> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <!--#################Host###############################--> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host> </Engine> </Service> </Server> <?xml version = "1.0" encoding = ‘uft-8‘?> <!-- 在一個或多個貢獻者許可協議下授權給Apache軟件基金會(ASF)。 請參閱通知文件分發的關於版權所有權的其他信息。Apache軟件基金會 在Apache許可證(2.0)下授權該文件給您。除非符合許可證,否則不得 使用此文件。你可以在 http://www.apache.org/licenses/LICENSE-2.0 獲得一個許可證的副本。 除非適用法律要求或書面同意,在許可證下分發的軟件在“以此類推”的基礎 上分發,無論任何類型的保證或條件,無論明示還是暗示。查看許可證下限 定的特定語言和權限的許可證。 --> <!--###################Server#####################--> <!-- 註意:一個“服務器”他本身不是一個“容器”,所以你不能在這個級別上 定義諸如“Valves”子組件。 文件在/docs/.config/service.html下 --> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <!-- Security listener. Documentation at /docs/config/listeners.html <Listener className="org.apache.catalina.security.SecurityListener" /> --> <!--APR library loader. Documentation at /docs/apr.html --> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!-- Prevent memory leaks due to use of particular java/javax APIs--> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <!-- 全面的JNDI(Java naming and directory interface)資源 文件在/docs/jndi-resources-howto.html --> <GlobalNamingResources> <!-- 可編輯用戶數據,也可以由UserDatabaseRealm認證用戶。 --> <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> <!--<Server>頂層容器 1.Server的主要任務: 提供一個接口讓客戶端能夠訪問到這個Service集合,同時維護它所包含 的所有的Service的聲明周期,包括如何初始化、如何結束服務、如何找到 客戶端要訪問的Service。 2.Server的屬性:
  • shutdown屬性,關閉server的指令
  • port屬性,Server接受關閉指令的端口號,值為-1表示禁用關閉指令。
2.Server的特點:
  • 一個Server可以包含多個Service
--> <!--#################Service#######################--> <!-- 一個“Service”是一個或多個“Connectors”的集合,這些“Connectors”共享 一個容器。“Service”本身不是一個“Container”,所以你不能在這一級別上定義諸 如“Valves”的子組件。 Documentation at /docs/config/service.html --> <Service name="Catalina"> <!--這些Connector可以使用共享的執行器,可以定義一個或多個命名線程池--> <!-- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/> --> <!--<Service> 1.Service的主要任務: 提供對外服務,將Connector和Engine組裝在一起。 2.Service的屬性:
  • name屬性,用於區分不同的Service
3.特點
  • 一個Server可以包含多個Service,不同的Service用來監聽不同的端口。
  • 一個Service可以包含多個Connector,但是只能包含一個Engine。
--> <!--################Connector#########################--> <!--一個Connector代表一個端點,通過該端點接受請求返回響應。文件在: Java HTTP Connector: /docs/config/http.html (blocking & non-blocking) Java AJP Connector: /docs/config/ajp.html APR (HTTP/AJP) Connector: /docs/apr.html 在端口8080上定義一個沒有SSL協議/基於TLS的HTTP1.1協議的Connector --> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URLEncoding="utf-8"/> <!--一個Connector使用共享的線程池--> <!-- <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> <!-- 在端口8443定義一個 SLL協議/基於TLS的HTTP1.1協議 這個連接器使用需要JSSE(Java安全套接字擴展)配置的NIO實現。 當使用APR或原生實現時,需要Open SSL的樣式配置,如在APR或 本地文檔所描述的。--> <!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> --> <!--在8009端口定義一個AJP1.3協議的Connector--> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <!--<Connector> 1.Connector的主要任務: 接受連接請求,創建Reuqest和Response對象用於請求交換數據,然後將產生的 Request和Response對象傳給Engine並分配線程讓Engine來處理請求。 2.Connector的屬性:
  • port屬性,設置監聽端口
  • protocol屬性,設置協議
  • connectTimeout屬性,設置連接超時時間
  • redirectPort屬性,請求重定向(當強求https請求而請求http時重定向)
3.特點
  • 此處定義了兩個Connector,需要註意的是Tomcat Port 8009 與AJP13協議。
參考鏈接:http://blog.163.com/cmdbat@126/blog/static/170292123201311301419411/
  • 簡述AJP協議的特性:AJP協議負責Tomcat和其他的HTTP服務器(如Apache)建立連接;因為Tomcat用戶Servlet/Jsp容器,對動態資源的處理較快,但對靜態資源的處理較慢。相比之下,Apache和IIS等HTTP服務器對靜態資源處理較快。所有:常常將Tomcat與Apache等集成,前者作Servlet容器,後者處理靜態資源,而AJP協議便負Tomcat和Apache的連接。
  • 一個Service可以包含多個Connector
--> <!--#################Engine###############################--> <!-- 一個Engine代表處理每一個請求的入口點(在Calalina內,我們定義的Service內) 為了Tomcat的獨立,Engine實現了分析請求包含的HTTP頭部並傳遞給適當的 主機(虛擬主機)上。 Documentation at /docs/config/engine.html --> <!--你應該設置JVM Route以支持通過AJP IE的負載平衡。 <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> --> <Engine name="Catalina" defaultHost="localhost"> <!--For clustering, please take a look at documentation at: /docs/cluster-howto.html (simple how to) /docs/config/cluster.html (reference documentation) --> <!-- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> --> <!-- 使用LockOutRealm阻止試圖通過蠻力法攻擊來猜測用戶密碼 <Realm className="org.apache.catalina.realm.LockOutRealm"> <!-- 該領域使用全局JNDI資源下在密鑰“UserDatabase”中配置的用戶數據庫。 對該UserDatabase執行的任何編輯都可以立即對該領域使用。 --> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <!--<Engine> 1.Engine的主要任務: 處理接受的請求 2.Engine的屬性:
  • name屬性,用於記錄日誌和錯誤信息
  • defaultHost屬性,用於指定的host進行處理,必須與Host組件的name屬性匹配
3.特點
  • 一個Service只能包含一個Engine
<!--#################Host###############################--> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- SingleSignOn valve, Web應用程序間的共享認證 Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access日誌處理所有示例。 Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 1.Host的主要任務: 運行多個Web應用(一個Context代表一個Web應用),並負責安裝、展開、啟動和結束每個Web應用。 2.Host的屬性:
  • name屬性,用於指定虛擬主機名(需要在DNS服務器註冊的)
  • appBase屬性,War文件所在目錄
  • unpackWARs屬性, 是否解壓War文件
  • autoDeploy屬性,是否自動部署(Tomcat運行時定期檢查新的Web應用)
  • deployOnStartup屬性,啟動時檢查Web的更新,檢測到的所有應用是為新應用,當有應用更新時會出發應用重新部署。
3.特點
  • 一個Engine可以包含多個Host
1.Context的主要任務: 在特定虛擬主機上運行的一個Web應用。每個Web應用基於WAR文件,或WAR文件解壓後對應的目錄(這裏稱為應用目錄)。 2.特點
  • Context是Host的子容器,每個Host中可以定義任意多的Context元素。
</Host> </Engine> </Service> </Server
1、整體關系 核心組件之間的整體關系,在上一部分有所介紹,這裏總結一下: Server元素在最頂層,代表整個Tomcat容器;一個Server元素中可以有一個或多個Service元素。 Service在Connector和Engine外面包了一層,把它們組裝在一起,對外提供服務。一個Service可以包含多個Connector,但是只能包含一個Engine;Connector接收請求,Engine處理請求。 Engine、Host和Context都是容器,且 Engine包含Host,Host包含Context。每個Host組件代表Engine中的一個虛擬主機;每個Context組件代表在特定Host上運行的一個Web應用。

2、如何確定請求由誰處理?

當請求被發送到Tomcat所在的主機時,如何確定最終哪個Web應用來處理該請求呢?

(1)根據協議和端口號選定Service和Engine

Service中的Connector組件可以接收特定端口的請求,因此,當Tomcat啟動時,Service組件就會監聽特定的端口。在第一部分的例子中,Catalina這個Service監聽了8080端口(基於HTTP協議)和8009端口(基於AJP協議)。當請求進來時,Tomcat便可以根據協議和端口號選定處理請求的Service;Service一旦選定,Engine也就確定。 通過在Server中配置多個Service,可以實現通過不同的端口號來訪問同一臺機器上部署的不同應用。

(2)根據域名或IP地址選定Host

Service確定後,Tomcat在Service中尋找名稱與域名/IP地址匹配的Host處理該請求。如果沒有找到,則使用Engine中指定的defaultHost來處理該請求。在第一部分的例子中,由於只有一個Host(name屬性為localhost),因此該Service/Engine的所有請求都交給該Host處理。

(3)根據URI選定Context/Web應用

這一點在Context一節有詳細的說明:Tomcat根據應用的 path屬性與URI的匹配程度來選擇Web應用處理相應請求,這裏不再贅述。

(4)舉例

以請求http://localhost:8080/app1/index.html為例,首先通過協議和端口號(http和8080)選定Service;然後通過主機名(localhost)選定Host;然後通過uri(/app1/index.html)選定Web應用。
一個Server可以包含多個Service,不同的Service用來監聽不同的端口。 一個Service可以包含多個Connector,但是只能包含一個Engine。 Tomcat可以提供多個Server Server:對外提供接口(一個Server可以有多個Service) Service:對外提供服務(一個Service可以包含多個Connector,但是只能包含一個Engine) Connector:接受客戶端請求(一個Service可以包含多個Connector) Engine:處理接受進來的請求(一個Service只能包含一個Engine) Host:運行Web應用程序(一個Engine至少有一個Host) 參考鏈接:
  • https://www.cnblogs.com/kismetv/p/7228274.html(詳解Tomcat 配置文件server.xml)
  • http://blog.163.com/cmdbat@126/blog/static/170292123201311301419411/ (Tomcat Port 8009 與AJP13協議)
  • http://blog.51cto.com/754599082/2064144 (Tomcat基本配置和輕量級博客搭建)
  • http://tomcat.apache.org/tomcat-8.0-doc/config/index.html(tomact官方文檔)
  • http://www.cnblogs.com/xing901022/p/4592159.html (Tomcat6使用Jasper解析JSP)
  • https://blog.csdn.net/zhuxinquan61/article/details/52152053(Tomcat項目設置域名)

Tmocat的service.xml配置文件詳解(含中文翻譯)