
connector連接配接器元件:主要作用負責接收請求,常見的連接配接器有三種,分别是http連接配接器,https連接配接器,和ajp連接配接器;進入tomcat的請求可分為兩類,一類是來自用戶端浏覽器的通路,一類是來自其他web server反代通路;如果想配置tomcat隻能通過代理來通路,并且不能繞過代理來通路,我們可以選擇把http和https連接配接器給禁用了,隻留一個ajp連接配接器,這樣一來tomcat就隻能通過httpd的ajp反代來通路,因為浏覽器不支援ajp協定;
前文我們聊了下tomcat的配置檔案相關格式群組件簡介以及webapp目錄結構,manager部署和host managera部署,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13307892.html;今天我們來詳細聊一聊server.xml中的各元件配置和屬性;
server:在tomcat中,一個server就代表一個tomcat執行個體;所謂tomcat執行個體就是在伺服器上表現為一個Java程序,預設監聽在8005端口,該套接字預設隻接收"SHUTDOWN"來關閉tomcat執行個體;是以,在同一實體主機上啟動多個tomcat執行個體時,需要修改其監聽端口為不同其他tomcat執行個體所監聽的端口;
示例:修改server預設用于關閉tomcat執行個體的指令
預設配置
使用預設配置關閉tomcat執行個體
提示:可以看到當我們使用telent去連接配接8005端口,然後給它發送一個SHUTDOWN指令就可以實作關閉tomcat執行個體;
更改關閉tomcat執行個體指令為SHUTDOWN-TOMCAT
提示:以上配置表示使用SHUTDOWN-TOMCAT指令來關閉tomcat執行個體
測試:重新開機tomcat服務,然後用原來的SHUTDOWN指令看看是否可以關閉tomcat執行個體呢?
提示:可以看到現在我們使用shutdown指令就不能把tomcat執行個體關閉掉了;
測試:用SHUTDOWN-TOMCAT指令是否可關閉tomcat執行個體呢?
提示:我們使用SHUTDOWN-TOMCAT指令就可以實作關閉tomcat執行個體;這裡建議把這個關閉執行個體的指令修改成其他不容器被猜到的指令,這樣相對要安全點;
Service:用于實作将一個或多個connector元件關聯至一個engine元件;
提示:以上配置上預設配置,預設service名稱叫catalina ,它關聯了一個connector 端口為8080 ,協定是http/1.1,連接配接逾時時長為20秒,如果啟用了https,通路對應資源如果必須是https,它預設會跳轉至8443端口;其實service的屬性就 一個name,這個沒有什麼好說的,預設情況我們都不會去更改service的名稱,用預設的catalina就行;
Connector連接配接器元件:主要作用負責接收請求,常見的連接配接器有三種,分别是http連接配接器,https連接配接器,和ajp連接配接器;進入tomcat的請求可分為兩類,一類是來自用戶端浏覽器的通路,一類是來自其他web server反代通路;如果想配置tomcat隻能通過代理來通路,并且不能繞過代理來通路,我們可以選擇把http和https連接配接器給禁用了,隻留一個ajp連接配接器,這樣一來tomcat就隻能通過httpd的ajp反代來通路,因為浏覽器不支援ajp協定;
Connector元件的屬性有:port用于指定連接配接器監聽的端口,如果隻指定監聽端口沒有指定ip位址,表示監聽本機所有可用位址的對應端口;protocol用于指定用于連接配接該連接配接器所用到的協定;connectionTimeout用于指定連接配接該連接配接器的逾時時長;address用于指定監聽的ip位址,不指定預設是本機所有可用位址;maxThreads用于指定該連接配接器的最大連接配接數,不指定預設為200;enableLookups用于指定是否啟用DNS查詢功能,如果開啟了此功能,每次通路它都會把對應IP位址反接成主機名,其實這個是很消耗通路時間的,是以通常情況下都是把這個屬性關閉的;acceptCount用于指定等待連接配接隊列的長度,如果連結隊列已經滿載了,這個屬性就是來指定後面排隊的長度;redirectPort用于指定重定向端口,假如我們通路一個資源,而該資源又限定必須通過https協定通路,此時我們用http連接配接器通路該資源,它會跳轉至對應端口的連接配接器上;sslProtocol用于指定ssl協定;URIEnconding用于指定uri的字元集,這個在有些uri是中文的場景中需要指定;
示例:添加一個連接配接器,監聽本機127.0.0.1:9090 使用協定為http1.1
提示:以上配置标簽名稱區分大小寫,裡面的屬性不區分大小;通常建議還是區分大小寫去配置;tomcat的配置檔案都遵循Java變量命名規範,都是駝峰式命名;
測試:重新開機tomcat服務,看看127.0.0.1:9090是否處于監聽狀态?
提示:可以看到127.0.0.1:9090已經處于監聽狀态;
Engine元件:主要作用執行個體化一個Servlet執行個體,用于運作servlet代碼,其内部可以一個或多個host元件來定義站點;如果有多個虛拟主機通常需要通過defaultHost屬性來定義預設的虛拟主機;這裡的虛拟主機和httpd裡的虛拟主機概念沒有本質不同;engine的常用屬性有:name用于指定引擎的名稱;通常engine的名稱為catalina不會去改變,這是因為tomcat内建代碼中相關引擎的名稱為catalina;defaulthost用于指定預設虛拟主機;jvmroute用于指定tomcat叢集jvm辨別,意思是多個tomcat執行個體組成的叢集,對應請求路由該發往那個引擎上,就是靠jvmroute來指定;這個有點類似ipvs中給封包打标記的意思;通常用于tomcat叢集基于cookie的會話綁定或sessions stick中使用;
Host元件:位于engine内部用于接收請求并進行相應處理的主機或虛拟主機;常用的屬性有:name用于指定host的名稱;appBase用于指定此Host的webapps的預設存放目錄,指存放非歸檔的web應用程式的目錄或歸檔的WAR檔案目錄路徑;可以使用基于$CATALINA_BASE變量所定義的路徑的相對路徑;uppackwars用于指定是否将.war格式的包展開;autodeploy用于指定是否支援自動部署(在Tomcat處于運作狀态時,将某webapp放置于appBase所定義的目錄中時,是否自動将其部署至tomcat);
示例:添加一個虛拟主機,名為www.test1.com ,對應網頁目錄根檔案路徑為/appdata/test 支援展開.war包,支援自動部署
更改配置檔案,新增一個host
提示:注意appBase必須區分大小寫,否則配置不會生效;
建立host所指定的目錄和目錄結構
提示:這裡建立的虛拟主機就相當于通路對應虛拟主機名稱,然後就傳回一個頁面;通路的URL中是除了虛拟主機名稱就沒有别的uri了;是以我們需要在指定目錄下建立一個ROOT的目錄;
建立一個測試頁
重新開機服務,通路我們建立的虛拟主機,看看是否能夠通路到我們提供的測試頁面?
用浏覽器通路建立的虛拟主機,看看是否通路到我們提供的測試頁面?
提示:可以看到我們通路www.test1.com 是可以正常通路到我們提供的測試頁面,這意味着我們配置的虛拟主機生效了;
Context元件:該元件主要作用是用于定義url路徑和網頁檔案路徑的對應關系;有點類似nginx裡的alias指令
示例:把/helloapp/helloword 部署到www.test1.com虛拟主機上,并可以通過www.test1.com:8080/helloword通路到
建立目錄結構,并準備測試網頁
提供測試頁面
修改配置檔案,新增context 把/helloapp/helloword 部署到www.test1.com上 并實作通路www.test1.com:8080/helloword
提示:以上配置表示通路www.test1.com/helloword 對應頁面檔案存放在/helloapp/helloword/下;context元件中path用于指定uri的路徑;docBase用于指定網頁目錄;
重新開機tomcat,通路www.test1.com:8080/helloword看看是否通路到我們提供的測試頁面?
提示:我們提供的測試頁面能夠被通路到;
Valve元件:該元件根據不同類的執行個體不同,其作用也不同;常用于定義日志,通路控制;
示例:給www.test1.com定義一個通路日志
提示:Valve元件中className 用于指定類,不同類對于Valve有着不同的意義,也決定了valve的作用;valve相關使用說明請參考官方文檔https://tomcat.apache.org/tomcat-7.0-doc/config/valve.html;directory用于指定存放日志的目錄,如果使用相對路徑則相對CATALINA_BASE所指定的位置;prefix用于指定日志檔案字首名稱;suffix用于指定日志檔案字尾名稱;中間部分通常是年月日時間用中橫線連接配接的字串;pattern用于指定日志格式;有關日志格式的宏定義相關說明請檢視官方文檔https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/AccessLogValve.html;這裡需要說明一下,"表示一個雙引号,如果pattern中間有雙引号,請使用"去表示;
重新開機tomcat,通路www.test1.com 看看是否有日志生成
提示:重新開機tomcat後,在對應目錄就可以看到有我們剛才定義的日志檔案;
測試:通路www.test1.com 看看是否在記錄日志到對應日志檔案中?
示例:定義隻允許192.168.0.21通路www.test1.com
提示:以上配置表示隻允許192.168.0.21這台主機通路www.test1.com這台虛拟主機所提供的内容,其他主機都無法通路,包括本機;
測試:重新開機tomcat,在ip為192.168.0.21上通路www.test1.com看看是否可通路?
測試:在非192.168.0.232的主機上通路看看是否可通路?
提示:可以看到在非192.168.0.21上通路提示為權限拒絕,是不能通路www.test1.com這台虛拟主機所提供的頁面的;當然上面的配置使用allow來指定隻允許的IP位址,這種是白名單機制;如果使用deny去指定,表示拒絕指定的IP通路,開放未指定的IP通路,這就是黑名單機制;
作者:Linux-1874
出處:https://www.cnblogs.com/qiuhom-1874/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.