隨筆-13  評論-6  文章-0  trackbacks-0

          Tomcat服務器配置參考

          Host容器

          概述

          Host元素代表一個虛擬主機,虛擬主機將服務器的網絡名(比如www.mycompany.com)和運行Catalinade的某個特定服務器聯系起來。為了生效,網絡名稱必須在管理你所在的Internet域的DNS服務器進行登記---請聯系你的網絡管理員。

          在許多情況下,系統管理員可能希望為同一個虛擬主機或應用關聯多個網絡名稱(比如www.mycompany.com和company.com)。這可以利用下面討論的Host Name Alias特征來完成。

          在Engine元素中可以嵌套一個或多個Host元素。在Host元素中可以嵌套context元素。在與每個Engine相關聯的所有Host中,必須有一個Host的名稱與Engine的defaultHost屬性匹配。

          以下的描述使用變量$CATALINA_HOME來指Tomcat 5安裝的目錄。大多數的相對路徑都是以該目錄為基準。但是,通過設置CATALINA_BASE目錄,可以運行多個Tomcat 5實例,這時你應該使用$CATALINA_BASE來作為目錄基準,而不是使用$CATALINA_HOME。

          屬性
          公共屬性

          所有Host的實現必須支持如下屬性:

          屬性 描述
          appBase

          虛擬主機的Applicaton Base目錄。這是在該虛擬主機上發布web應用的目錄路徑。你可以指定絕對路徑,或者使用相對于$CATALINA_HOME的路徑。有關web應用的自動識別和發布的更多信息,請參考應用自動發布。

          autoDeploy

          這個標志表示,在Tomcat運行的時候,放到appBase目錄下的新的web應用是否自動發布。缺省為true。這方面的更多信息參考應用自動發布

          backgroundProcessorDelay

          這個值代表在該host及其子容器(包括所有的wrappers)上調用backgroundProcess方法的延時,以秒為單位。如果延時值非負,子容器不會被調用,這意味著子容器使用自己的處理線程。如果該值為正,會創建一個新的線程。在等待指定的時間以后,該線程在Host及其子容器上調用backgroundProcess方法。Host使用后臺處理進行與web應用實時發布有關的操作。如果沒有指定,缺省值是-1,說明host依賴其所屬的Engine的后臺處理。

          className

          實現的Java類名。該類必須實現org.apache.catalina.Host接口。如果沒有指定,使用標準實現(在下面定義)

          deployOnStartup

          這個標志表明這個host的web應用是否由host configurator 自動發布。缺省為true。這方面的更多信息參考自動應用發布。

          name

          虛擬主機的網絡名稱,也就是在DNS服務器上注冊的名稱。嵌套在Engine的所有Host中,必須有一個Host的名字與Engine的defaultHost屬性相同。如果想為同一個虛擬主機指定多個網絡名稱,參考主機名別名。

           

          標準實現

          Host的標準實現是org.apache.catalina.core.StandardHost。它還支持如下的附加屬性

          屬性 描述
          debug

          與Engine相關聯的Logger的調試信息的詳細程度。數字越大,輸出越詳細。如果沒有指定,缺省值為0。

          deployXML

          如果不想使用Context XML配置文件來發布web應用,設為false。同時也失去了利用manager應用程序安裝web應用或者“.war”文件的能力(這些web應用或.war文件不在Host的配置基準目錄$CATALINA_HOME/conf/[engine_name]/[host_name]下面)

          web應用使用catalina的安全許可發布,如果需要讓不可信的用戶管理web應用,這個值可以設為false。缺省為true。

          errorReportValveClass

          Host使用的錯誤報告valve的Java類名。這個valve的責任是輸出錯誤報告。設置這個值可以定制Tomcat產生的錯誤頁面的格式。這個類必須實現org.apache.catalina.Valve接口。如果沒有指定,使用缺省值

          og.apache.catalina.valvees.ErrorReportValve.

          unpackWARs

          如果希望將位于appBase目錄下的WAR文件解壓縮成對應的目錄結構,設為true。如果希望直接從WAR文件運行web應用,設為false。更多信息參考應用自動發布。

          workDir

          Host的web應用使用的臨時目錄的路徑。每個應用都有自己的子目錄,用于臨時的讀寫。如果在Context中設置了workDir屬性,它將會覆蓋Host的workDir屬性。如Servlet Specification中所述,通過servlet context的屬性javax.servlet.context.tempdir,這個目錄可以被servlet使用。如果沒有指定,使用$CATALINA_HOME/work下面的合適的目錄。

          嵌套組件

          可以在Host元素中嵌套一個或者多個Context元素,每個Context元素代表這個虛擬主機下的一個不同的web應用。同時,你可以嵌套一個DefaultContext元素,用來定義后續發布的web應用的缺省值

          可以在Host元素中選擇嵌套一個DefaultContext元素,用來定義自動發布的web應用的缺省特性。

          下列元素可以嵌套在Host元素中,但至多只能嵌套一個實例:

          • Logger - 配置一個logger,用來接收和處理Host的所有日志消息,以及這個Host的所有Context的日志消息(除非被低一級的Logger配置覆蓋)
          • Realm -配置一個realm,Realm的用戶數據庫以及用戶角色被這個Host的所有Context共享(除非被低一級的Realm配置覆蓋)
          專有特征
          訪問日志

          正常情況下,運行web服務器會生成訪問日志。訪問日志以標準格式為每個請求輸出一行信息。Catalina包含一個可選的Valve實現,可以用標準格式生成日志,還可以使用任意定制的格式。

          通過在Engine,Host或者Context中嵌套一個Valve元素,Catalina會為該容器處理的所有請求創建訪問日志,如下所示:

          <Host name="localhost" ...>
            ...
            <Valve className="org.apache.catalina.valves.AccessLogValve"
                   prefix="localhost_access_log." suffix=".txt"
                   pattern="common"/>
            ...
          </Host>
          
          參考Access Log Valve,以獲得更多配置屬性的信息;
          應用自動發布

          如果使用標準的Host實現,當Catalina第一次啟動時,如果deployOnStartup屬性為true,tomcat會自動采取如下的步驟:

          • 假定$CATALINA_HOME/conf/[engine_name]/[host_name]目錄中的任何XML文件都包含一個Context元素(以及它的相關的子元素),通常情況下,這個<Context>的docBase屬性指向一個web應用目錄的絕對路徑,或者是WAR文件的絕對路徑。
          • 如果WAR文件對應的目錄不存在,則這個WAR文件會被自動展開,除非unpackWARs屬性設為false。在重新發布更新后的WAR文件時,重新啟動Tomcat之前一定要刪除展開后的目錄,這樣更新后的WAR文件才會被重新展開(如果使能了auto deployer,它會自動完成這項工作)
          • application base目錄下的任何子目錄,如果包含/WEB-INF/web.xml文件,Tomcat認為這個一個展開后的web應用,會為這個目錄自動產生一個Context元素,即使這個目錄沒有在conf/server.xml文件中出現。產生的Context會使用DefaultContext中的屬性來配置。自動產生的Context的context路徑是“/”后面跟上目錄名,除非目錄名是ROOT,這種情況下context路徑是空字符串(“”);

          除了啟動時候的自動發布以外,在Tomcat運行的時候,當新的XML 配置文件,WAR文件或者子目錄(包含新的web應用)放到appBase目錄下,或者當XML配置文件放到$CATALINA_HOME/conf/[engine_name]/[host_name]目錄)的時候,該web應用被自動發布。auto deployer也負責跟蹤web應用的如下變化:

          • 如果更新了WEB-INF/web.xml文件,會觸發web應用的重載;
          • 如果WAR文件被更新,并且WAR文件已經展開,首先刪除展開的web應用,然后發布更新的WAR文件;
          • 如果XML配置文件被更新,首先刪除該應用(但是不刪除任何展開以后的目錄),然后發布相關的web應用
          主機名別名

          在許多服務器環境中,多個網絡名稱可能指向同一個IP地址(比如,www.mycompany.com和company.com都指向192.168.1.1)。正常情況下,每個網絡名稱應該在conf/server.xml中對應一個Host元素,每個Host元素有自己的一套web應用。

          但是,有些情況下,可能希望兩個或者更多網絡名稱解析到同一個虛擬主機上,運行相同的一套web應用。這種情況的典型用途是公司網站。用戶可以使用www.mycompany.com和company.com訪問同樣的內容和應用。

          通過在Host元素中嵌套一個或者多個Alias元素,可以完成上述功能。

           

          <Host name="www.mycompany.com" ...>
            ...
            <Alias>mycompany.com</Alias>
            ...
          </Host>
          

          為了使這個策略生效,所有的網絡名稱必須在DNS服務器登記,指向運行Catalina實例的同一臺計算機。

           

          生命期Listeners

          如果一個Java對象需要知道Context什么時候啟動,什么時候停止,可以在這個對象中嵌套一個Listener元素。該Listener元素必須實現了org.apache.catalina.LifecycleListener接口,在發生對應的生命期事件的時候,通知該Listener。可以按照如下的格式配置這樣的Listener:

          <Host name="localhost" ...>
            ...
            <Listener className="com.mycompany.mypackage.MyListener" ... >
            ...
          </Host>
          
          注意,一個listener可以具有任意多的附加屬性。屬性名與JavaBean的屬性名相對應,使用標準的屬性命名方法。
          請求過濾器
          對每個發送到Engine,Host或者Context的請求,可以要求Catalina檢查IP地址或主機名稱。Catalina使用一系列配置好的“接受”或者“拒絕”過濾器對客戶端的地址或者主機名進行檢查,過濾器是按照正則表達式語法定義的,由Jakarta Regexp正則表達式庫支持。不被接受的請求會返回一個HTTP“Forbidden”錯誤。下面是過濾器的定義。
          <Host name="localhost" ...>
            ...
            <Valve className="org.apache.catalina.valves.RemoteHostValve"
                   allow="*.mycompany.com,www.yourcompany.com"/>
            <Valve className="org.apache.catalina.valves.RemoteAddrValve"
                   deny="192.168.1.*"/>
            ...
          </Host>
          

           

          如果想知道過濾器支持的更多選項的信息,參考Remote Address Filter和Remote Host Filter

          單次登錄(Single Sign On

          在許多環境尤其是門戶環境下,對特定虛擬主機上的一套web應用,只希望對用戶進行一次認證。這可以在Host元素中嵌套如下的元素完成:

          <Host name="localhost" ...>
            ...
            <Valve className="org.apache.catalina.authenticator.SingleSignOn"
                   debug="0"/>
            ...
          </Host>
          

          單次登錄根據如下規則運作:

          • 這個虛擬主機的所有web應用必須共享同一個Realm。在實際情況中,這意味著你可以在這個Host元素中嵌套Realm元素(或者是Engine元素),但不能在web應用對應的Context中嵌套Realm元素
          • 如果用戶只訪問這個虛擬主機上任意web應用的沒有加保護的資源,他們不會被要求認證;
          • 一旦用戶訪問這個虛擬主機下的任意web應用的保護資源,用戶會被要求認證。使用正在訪問的web應用的login方法;
          • 一旦認證通過,與這個用戶相關聯的角色決定了它對所有的web應用的訪問控制權限;而不需要對每個應用單獨認證;
          • 一旦用戶從某個web應用注銷(比如,如果使用了基于表單的login,對應的session過期或者無效),用戶在所有web應用的session都會失效;任何后續的對保護資源的訪問會要求對用戶重新認證;
          • 單次登錄特征使用HTTP cookies傳輸令牌,將每個請求和用戶身份聯系起來,因此客戶端必須支持cookies;
          用戶Web應用

          許多web服務器會自動將以"~"和用戶名開始的URI映射到用戶主目錄下的某個目錄(通常為public_html)。在Catalina中,通過使用特殊的Listener元素,可以完成上述功能

          在利用/etc/password來標識有效用戶的Unix系統下使用如下配置:

          <Host name="localhost" ...>
            ...
            <Listener className="org.apache.catalina.startup.UserConfig"
                      directoryName="public_html"
                      userClass="org.apache.catalina.startup.PasswdUserDatabase"/>
            ...
          </Host>
          

          在不使用/etc/password的服務器上,可以要求Catalina將指定的基準目錄下的所有目錄(比如c:\homes)看成是用戶主目錄:

          <Host name="localhost" ...>
            ...
            <Listener className="org.apache.catalina.startup.UserConfig"
                      directoryName="public_html"
                      homeBase=c:\Homes"
                      userClass="org.apache.catalina.startup.HomesUserDatabase"/>
            ...
          </Host>
          

          如果某個名為craigmcc的用戶的主目錄已經設置好,通過使用如下URL,可以瀏覽它的內容:

          http://www.mycompany.com:8080/~craigmcc
          

           

          使用這個特征需要注意如下幾個問題:

          • 每個用戶web應用會使用該Host的DefaultContext元素定義的特征發布;
          • 包含多個Listener元素的實例也是有效的。但是,這只在你希望配置多個homeBase目錄情況下才有意義;
          • 執行Catalina的用戶名對每個用戶的web應用目錄以及它的所有內容必須有讀的權限;
          posted on 2006-02-16 17:05 java之海 閱讀(3049) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 莱阳市| 尉氏县| 玉林市| 三明市| 呼和浩特市| 黄梅县| 襄汾县| 哈巴河县| 五华县| 铅山县| 义马市| 漠河县| 郎溪县| 呼玛县| 芜湖县| 乾安县| 阿拉善左旗| 莒南县| 郴州市| 兖州市| 安康市| 大埔县| 安仁县| 句容市| 和顺县| 大理市| 舟山市| 手游| 祁东县| 拜泉县| 连南| 浮梁县| 仁布县| 金湖县| 砚山县| 佛学| 秦皇岛市| 东平县| 开封县| 新丰县| 双柏县|