前文我們聊了下tomcat的組態檔相關格式和組件簡介以及webapp目錄結構,manger部署和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訪問,這就是黑名單機制;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/33339.html
標籤:Linux
上一篇:010.Nginx正反代理
下一篇:Docker部署LNMP完整教程
