Tomcat 配置詳解/優(yōu)化方案

1担平、Tomcat的目錄層次結(jié)構(gòu)

bin:? ?存放啟動和關(guān)閉Tomcat的腳本文件

conf:?存放Tomcat服務(wù)器的各種配置文件

lib:? ?存放tomcat服務(wù)器支撐的jar包

logs:? 存放Tomcat的日志文件

temp:? 存放Tomcat運(yùn)行時產(chǎn)生的臨時文件

webapps:web應(yīng)用雖在目錄,即供外界訪問的web資源的存放目錄

work:? Tomcat的工作目錄

2膀懈、JavaWeb應(yīng)用的組成結(jié)構(gòu)

|----html、jsp蛔溃、css止潘、js等文件,根目錄下的文件外界可以直接訪問

|----WEB-INF目錄

|---------classes目錄(java類)

|---------lib目錄(java類運(yùn)行所需的jar包)

|---------web.xml(web應(yīng)用的配置文件)

WEB-INF?這個目錄下的文件外界無法直接訪問矫限,由web服務(wù)器負(fù)責(zé)調(diào)用

3、JavaWeb應(yīng)用的發(fā)布

開放式目錄方式:

打包war方式:? ?使用? ?Jar?-cvf?*.war?.

4佩抹、Tomcat的Server.xml文件

Tomcat本身由一系列可配置的組件構(gòu)成叼风,其中核心組件是Servlet容器組件,它是所有其他Tomcat組件的頂層容器棍苹。每個組件都可以在Tomcat安裝目錄/conf/server.xml文件中進(jìn)行配置无宿,每個Tomcat組件在server.xml文件中對應(yīng)一種配置元素。

server.xml被稱為Tomcat的主配置文件或全局配置文件枢里,它完成兩個任務(wù):

(1)提供Tomcat組件的初始配置

(2)說明Tomcat的結(jié)構(gòu)孽鸡,含義,使Tomcat通過實(shí)例化組件完成啟動及構(gòu)建自身栏豺。

server.xml中描述的重要元素有?Server?,Service?,Connector?,Engine?,Host?,Context?.

結(jié)構(gòu)如下:

Tomcat-配置及原理

它們的用處是:

Server:

頂層元素,整個配置文件的根元素,表示整個Servlet容器或者Tomcat服務(wù)器包含多個Listener,一個GlobalNamingResources和一個Service

Service:

一組Connector和一個Engine的集合彬碱,這組Connector共用一個Engine來處理所有Connector收到的請求,負(fù)責(zé)處理所獲得到的客戶請求

Listener組:

監(jiān)聽器奥洼,用來管理Tomcat生命周期和全局資源

GlobalNamingResources:

配置系統(tǒng)的JNDI(Java?Naming?and?Directory?Interface)

Connector組:

連接器巷疼,代表外部客戶之間的接口,將在一個指定的接口上偵聽客戶請求灵奖,并將獲得的請求交給進(jìn)行處理嚼沿,然后把處理結(jié)果返回給客戶

Engine:

引擎,處理中的所有客戶請求桑寨,具體來說伏尼,獲得一個交給的請求后,把這個請求匹配到某個上進(jìn)行處理尉尾,如果沒有找到合適的來進(jìn)行處理,則把這個請求交給一個默認(rèn)虛擬主機(jī)處理燥透。

Host組:

虛擬主機(jī)沙咏,處理一個特定主機(jī)的請求辨图,一般來說,每個虛擬主機(jī)都可以配置一個到多個Web應(yīng)用肢藐,每個Web應(yīng)用對應(yīng)一個,獲得的請求最終匹配到某個上故河,由它進(jìn)行處理。

Context組:

Web應(yīng)用組吆豹,每個Web應(yīng)用由一個或多個Servlet組成鱼的,當(dāng)獲得一個請求后,將映射/conf/web.xml文件中的元素痘煤,匹配一個Servlet類進(jìn)行處理并返回凑阶。當(dāng)一個Web應(yīng)用被初始化的時候,它將用自己的ClassLoader對象載入web.xml中定義的每個Servlet類衷快。

我們啟動Tomcat宙橱,在瀏覽器中輸入:http://localhost:8080/?會打開Tomcat的默認(rèn)頁面。實(shí)際上蘸拔,這個頁面是在Tomcat安裝目錄下的:/webapps/root/index.jsp;/webapps是Tomcat服務(wù)器用來存放Web應(yīng)用的目錄师郑,每個Web應(yīng)用都將在這建立各自的子目錄,剛裝好的Tomcat服務(wù)器虛擬主機(jī)的默認(rèn)目錄是/webapps/ROOT,所以默認(rèn)會打開這個目錄下的文件调窍。流程如下:

在/conf目錄下的web.xml配置文件中有如下配置:

index.html

index.htm

index.jsp

這里正是用來配置首頁的宝冕,Tomcat將按順序找出標(biāo)簽中的內(nèi)容作為首頁。而在我們的目錄下邓萨,它只找到了index.jsp地梨,所以會顯示它;

但我們不能將所有的Web程序都放在ROOT里先誉。所以我們需要更改Tomcat的虛擬目錄湿刽;

要設(shè)置虛擬路徑,需要在server.xml文件的中的Web應(yīng)用添加一個子元素褐耳,實(shí)際上是配置了一個Web應(yīng)用的物理存放地址到Tomcat虛擬路徑的過程诈闺,使得Tomcat能夠正確找到Web應(yīng)用的物理存放路徑;

步驟:

1)在server.xml的中加上如下代碼:

2)我們把寫好的Web應(yīng)用中的所有文件放到下面的目錄中:D:/myapp/test

3)重啟Tomcat,在瀏覽器中輸入:http://localhost:8080/test?即可測試

web.xml

Tomcat目錄下/conf?可為不同的應(yīng)用程序配置不同的上下文環(huán)境铃芦;用來對Servlet進(jìn)行映射雅镊;

一個Web應(yīng)用的根目錄下的/WEB-INF目錄中也有一個web.xml,當(dāng)部署一個Web應(yīng)用時刃滓,總是先加載/conf/web.xml仁烹,然后才加載自己Web應(yīng)用的/WEB-INF/web.xml文件;但處理過程中咧虎,總是先使用自己的web.xml配置文件卓缰,如果無法處理,才把它交給Tomcat的web.xml文件。

當(dāng)用戶在瀏覽器中輸入一個JSP文件地址:

http://localhost:8080/test/index.jsp

提交的請求最終由一個具體的Servlet來進(jìn)行處理征唬。我們請求傳遞的過程如下:

1)請求首先到達(dá)商品為8080的,然后把該請求交給引擎處理捌显;

2)將這個請求匹配到某個去處理,因?yàn)檫@里默認(rèn)處理的是localhost总寒,所以請求傳遞到name屬性是localhost的扶歪。

3)根據(jù)地址串中的子目錄為"test",獲知能夠處理該請求的Servlet存放在虛擬目錄為"test"的Web應(yīng)用中,于是通過查找元素摄闸,找到path="test"?的,然后根據(jù)中的物理路徑"docBase"的屬性值查找Web應(yīng)用的物理地址善镰;

4)服務(wù)器根據(jù)對應(yīng)的Web應(yīng)用的“WEB_INF/web.xml”配置文件,查找能夠處理index.jsp的servlet;

Tomcat-配置及原理

如上圖所示:

connector負(fù)責(zé)接收客戶請求,并向客戶返回響應(yīng)結(jié)果.在同一個service中,多個connector共享同一個Engine,同一個Engine可以有多個Host,一個Host可以有多個context;一個context對應(yīng)一個web項(xiàng)目.在運(yùn)行時,一個Tomcat會給每個context生成一個ServletContext類的實(shí)例.

http://localhost:8080/test/index.jsp

提交的請求最終由一個具體的Servlet來進(jìn)行處理年枕。我們請求傳遞的過程如下

請求首先到達(dá)商品為8080的,然后把該請求交給引擎處理炫欺;

將這個請求匹配到某個去處理,因?yàn)檫@里默認(rèn)處理的是localhost画切,所以請求傳遞到name屬性是localhost的竣稽。

根據(jù)地址串中的子目錄為"test",獲知能夠處理該請求的Servlet存放在虛擬目錄為"test"的Web應(yīng)用中,于是通過查找元素霍弹,找到path="test"?的,然后根據(jù)中的物理路徑"docBase"的屬性值查找Web應(yīng)用的物理地址毫别;

服務(wù)器根據(jù)對應(yīng)的Web應(yīng)用的“WEB_INF/web.xml”配置文件,查找能夠處理index.jsp的servlet;

5典格、Tomcat配置優(yōu)化

1 ,增加JVM堆內(nèi)存大小

通過修改conf 目錄下的 catalina.sh文件

JAVA_OPTS="-Djava.awt.headless=true?-Dfile.encoding=UTF-8

-server?-Xms1024m?-Xmx1024m

-XX:NewSize=512m?-XX:MaxNewSize=512m?-XX:PermSize=512m

-XX:MaxPermSize=512m?-XX:+DisableExplicitGC"

-Xms – 指定初始化時化的棧內(nèi)存

-Xmx –?指定最大棧內(nèi)存

在重啟你的Tomcat服務(wù)器之后岛宦,這些配置的更改才會有效。

2,maxThreads?連接數(shù)限制

maxThreads 是 Tomcat 所能接受最大連接數(shù)耍缴。一般設(shè)置不要超過8000以上砾肺,如果你的網(wǎng)站訪問量非常大可能使用 ? 運(yùn)行多個Tomcat實(shí)例的方法。

maxThreads?配置要結(jié)合?JVM?-Xmx?參數(shù)調(diào)整防嗡,也就是要考慮內(nèi)存開銷变汪。

maxThreads? ? ? ? ? 客戶請求最大線程數(shù)

minSpareThreads? ? ? ? 初始化時創(chuàng)建的?socket?線程數(shù)

maxSpareThreads? ? ? ?連接器的最大空閑?socket?線程數(shù)

3,壓縮

壓縮會增加Tomcat負(fù)擔(dān),最好采用Nginx?+?Tomcat?或者?Apache?+?Tomcat?方式蚁趁,壓縮交由Nginx/Apache?去做裙盾。

compression? ? ? ? ? ? ?打開壓縮功能

compressionMinSize? ? ? ?啟用壓縮的輸出內(nèi)容大小,這里面默認(rèn)為2KB

compressableMimeType? ? ?壓縮類型

4,安全配置

1他嫡,當(dāng)Tomcat完成安裝后你首先要做的事情如下:首次安裝完成后立即刪除webapps下面的所有代碼

rm?-rf?/srv/apache-tomcat/webapps/*

注釋或刪除?tomcat-users.xml?所有用戶權(quán)限番官,看上去如下:

#?cat?conf/tomcat-users.xml


2, 隱藏版本信息

隱藏Tomcat版本信息

vim?$CATALINA_HOME/conf/server.xml

connectionTimeout="20000"

redirectPort="8443"

maxThreads="8192"

minSpareThreads="64"

maxSpareThreads="128"

acceptCount="128"

enableLookups="false"

server="Neo?App?Srv?1.0"/>

運(yùn)行 ?http://localhost:8080/

服務(wù)器信息已經(jīng)被改為?Server:?Neo?App?Srv?1.0

3钢属, 應(yīng)用程序安全

關(guān)閉war自動部署?unpackWARs="false"?autoDeploy="false"徘熔。防止被植入木馬等惡意程序

關(guān)閉?reloadable="false"?也用于防止被植入木馬

6、Tomcat配置優(yōu)化后實(shí)例



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"/>


一組Connector和一個Engine的集合淆党,這組Connector共用一個Engine來處理所有Connector收到的請求酷师,

負(fù)責(zé)處理所獲得到的請求

-->

protocol="HTTP/1.1"

URIEncoding="UTF-8"

minSpareThreads="25"

maxSpareThreads="75"

enableLookups="false"

disableUploadTimeout="true"

connectionTimeout="20000"

acceptCount="300"

maxThreads="300"

maxProcessors="1000"

minProcessors="5"

useURIValidationHack="false"

redirectPort="8443"

server="Homeat App Srv 1.0"

/>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讶凉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子窒升,更是在濱河造成了極大的恐慌缀遍,老刑警劉巖慕匠,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饱须,死亡現(xiàn)場離奇詭異,居然都是意外死亡距淫,警方通過查閱死者的電腦和手機(jī)界赔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門嫁怀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人酪呻,你說我怎么就攤上這事⊙涡耄” “怎么了玩荠?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贼邓。 經(jīng)常有香客問我阶冈,道長,這世上最難降的妖魔是什么塑径? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任女坑,我火速辦了婚禮,結(jié)果婚禮上统舀,老公的妹妹穿的比我還像新娘匆骗。我一直安慰自己,他們只是感情好誉简,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布碉就。 她就那樣靜靜地躺著,像睡著了一般闷串。 火紅的嫁衣襯著肌膚如雪瓮钥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天窿克,我揣著相機(jī)與錄音骏庸,去河邊找鬼。 笑死年叮,一個胖子當(dāng)著我的面吹牛具被,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播只损,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼一姿,長吁一口氣:“原來是場噩夢啊……” “哼七咧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叮叹,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤艾栋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蛉顽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝗砾,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年携冤,在試婚紗的時候發(fā)現(xiàn)自己被綠了悼粮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡曾棕,死狀恐怖扣猫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情翘地,我是刑警寧澤申尤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站衙耕,受9級特大地震影響昧穿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜臭杰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一粤咪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧渴杆,春花似錦寥枝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至比搭,卻和暖如春冠跷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背身诺。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工蜜托, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人霉赡。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓橄务,卻偏偏與公主長得像,于是被迫代替她去往敵國和親穴亏。 傳聞我的和親對象是個殘疾皇子蜂挪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容