生產(chǎn)環(huán)境中的tomcat配置
版本安全
升級(jí)當(dāng)前tomcat版本為最新穩(wěn)定版本。
在升級(jí)版本中,需要注意兩點(diǎn):
-
盡量避免跨大版本的升級(jí)
-
將當(dāng)前老版本的server.xml , catalina.sh, web.xml和tomcat-users.xml進(jìn)行備份,然后部署完新的tomcat
后,將這些配置文件覆蓋過(guò)去。
隱藏版本信息
當(dāng)tomcat出現(xiàn)404或其它錯(cuò)誤時(shí),就會(huì)顯示當(dāng)前版本信息,為避免針對(duì)某一版本的攻擊,我們應(yīng)該將其隱藏或偽裝
版本信息的顯示是由一個(gè)jar包控制的,該jar包存放在tomcat安裝目錄下的lib目錄下,名稱為catalina.jar.
- 通過(guò)jar xf命令解壓這個(gè)jar包會(huì)得到兩個(gè)目錄META-INF和org, 通過(guò)修改
org/apache/catalina/util/ServerInfo.properties文件中的serverinfo字段來(lái)實(shí)現(xiàn)更改tomcat版本信息:
[root@localhost ~]# cat org/apache/catalina/util/SererInfo.properties | grep -v '^$|#'
server.info=Apache Tomcat/7.0.53
server.number=7.0.53.0
serer.built=Mar 25 2014 06:20:16
- 當(dāng)然還有另外一種方法來(lái)隱藏或偽裝版本信息,這兩種方法本質(zhì)是一樣的:
[root@localhost ~]# cd /usr/local/apache-tomcat-7.0.53/lib
[root@localhost lib]# mkdir -p org/apache/catalina/util
[root@localhost lib]# cd org/apache/catalina/util
[root@localhost util]# vim ServerInfo.properties
server.info=nolinux # 如果想修改成其它版本號(hào),把這個(gè)地方的值改成其它值就行了
修改完成之后,重啟tomcat即可看到效果!
tomcat的配置優(yōu)化
優(yōu)化web.xml
servlet與其它適用于整個(gè)Web應(yīng)用程序設(shè)置的配置文件,必須符合servlet規(guī)范的標(biāo)準(zhǔn)格式。通過(guò)它可以配置你
web應(yīng)用的相關(guān)選項(xiàng),tomcat在啟動(dòng)的時(shí)候會(huì)讀取這個(gè)文件,完成你開(kāi)發(fā)的系統(tǒng)的一些初始化操作。
它可以做如下事情:
- 提供基于servlet的相關(guān)配置
- 增加監(jiān)聽(tīng)器,監(jiān)控session或在tomcat啟動(dòng)時(shí),加載一些你希望加載的資源。比如創(chuàng)建數(shù)據(jù)庫(kù)連接池等
- 設(shè)置session過(guò)期時(shí)間,tomcat默認(rèn)是30分鐘
- 更改應(yīng)用的默認(rèn)頁(yè)面,通常為index.html/index.jsp等
- 增加過(guò)濾器, 做一些你希望的過(guò)濾操作,比如敏感詞匯的過(guò)濾
- 增加一些jstl(標(biāo)準(zhǔn)標(biāo)簽庫(kù))的定義,方便在jsp中直接include進(jìn)來(lái)
- struts, spring或hibernate的一些配置等
由于在生產(chǎn)環(huán)境中,tomcat不會(huì)直接對(duì)公網(wǎng)提供服務(wù),前端肯定有apache或nginx,因此,默認(rèn)主頁(yè)或自定義錯(cuò)
誤頁(yè),我們都在前端的apache或nginx中完成;另外也有可能是由程序員在項(xiàng)目?jī)?nèi)的WEB-INF/web.xml中去做定
義。
在tomcat新版本中,默認(rèn)已經(jīng)禁止列目錄功能。
下面是幾種覺(jué)的功能,在web.xml中的表現(xiàn)形式:
站點(diǎn)默認(rèn)主頁(yè):
自定義錯(cuò)誤頁(yè):
定義會(huì)話超時(shí)時(shí)間:
禁止列目錄:
優(yōu)化 tomcat-user.xml
該文件中包含用戶名,角色及密碼。 負(fù)責(zé)提供webapps下manager項(xiàng)目的登錄認(rèn)證管理。
在生產(chǎn)環(huán)境中,我們需要將該文件全部注釋。
優(yōu)化server.xml
-
maxThreads連接數(shù)限制:
maxThreads是tomcat所能接受的最大連接數(shù)。 一般設(shè)置不要超過(guò)8000, 如果你的網(wǎng)站訪問(wèn)量非常大可使用
多個(gè)tomcat實(shí)例的方法,即在一個(gè)服務(wù)器上啟動(dòng)多個(gè)tomcat,然后做負(fù)載均衡。
-
tomcat和php不同,php可以按照cpu和內(nèi)存的情況去配置連接數(shù),所以上萬(wàn)很正常。 但java還需要注意jvm
-
的參數(shù)配置。如果不注意就會(huì)因?yàn)閖vm參數(shù)過(guò)小而崩潰。
-
不要多個(gè)虛擬主機(jī):
強(qiáng)烈建議不要使用tomcat的虛擬主機(jī)功能,推薦一個(gè)tomcat實(shí)例啟動(dòng)一個(gè)站點(diǎn)。即,可以啟動(dòng)多個(gè)tomcat,而不是一個(gè)tomcat里包含多個(gè)虛擬主機(jī)。 因?yàn)閠omcat是多線程,共享內(nèi)存,任何一個(gè)虛擬主機(jī)中的應(yīng)用崩潰,都會(huì)影響到所有的應(yīng)用程序。
-
壓縮傳輸:
tomcat也支持gzip壓縮功能。 可以在server.xml配置文件中的Connector節(jié)點(diǎn)中配置如下參數(shù),來(lái)實(shí)現(xiàn)對(duì)指定資源類型進(jìn)行壓縮。
compression="on" # 打開(kāi)壓縮功能 compressionMinSize="50" # 啟用壓縮的輸出內(nèi)容大小,默認(rèn)為2KB noCompressionUserAgents="gozilla, traviata" # 對(duì)于以下的瀏覽器,不啟用壓縮 compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" # 哪些資源類型需要壓縮要注意的是,對(duì)于文本信息比如txt, html, css,javascript進(jìn)行壓縮,效果非常好。而對(duì)文件,圖片,視頻不要壓縮。
-
Connector 連接器的配置
bio、nio 和 apr,三種方式性能差別很大,apr 的性能最優(yōu), bio 的性能最差。而 Tomcat 7 使用的 Connector 默認(rèn)就啟用的 Apr 協(xié)議,但需要系統(tǒng)安裝 Apr 庫(kù),否則就會(huì)使用 bio 方式。
配置文件樣例,connector連接器設(shè)置為bio
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="2000" minSpareThreads="4"/>
<Connector executor="tomcatThreadPool"
port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443"
maxHeaderCount="64"
maxParameterCount="64"
maxHttpHeaderSize="8192"
URIEncoding="UTF-8"
useBodyEncodingForURI="false"
maxThreads="2048"
minSpareThreads="12"
acceptCount="2048"
connectionLinger="-1"
keepAliveTimeout="60"
maxKeepAliveRequests="32"
maxConnections="1000"
acceptorThreadCount="1"
pollerThreadCount="2"
selectorTimeout="1000"
enableLookups="false"
useSendfile="true"
selectorPool.maxSelectors="128" />
管理AJP端口
AJP是為tomcat與HTTP服務(wù)器之間通信而定制的協(xié)議,能提供較高的通信速度和效率。如果前端是apache的話,
會(huì)使用到AJP這個(gè)連接器,如果是nginx,就用不上了,因此需要注銷掉:
<!--
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-->
更改關(guān)閉tomcat實(shí)例的指令
server.xml中定義了可以直接關(guān)閉tomcat實(shí)例的管理端口。 我們通過(guò) telnet連接上該端口之后,輸入shutdown
即可關(guān)閉。值得注意的是,雖然實(shí)例關(guān)閉了,但是進(jìn)程還是存在的。由于默認(rèn)的端口和指令都很簡(jiǎn)單,默認(rèn)端口是
8005, 指令為SHUTDOWN. 因此我們要改得復(fù)雜一點(diǎn)(當(dāng)然,新版本的tomcat管理端口監(jiān)聽(tīng)在127.0.0.1):
<Server port="8005" shutdown="9SDKJ29jksjf23sjf0LSDF92JKS9DKkjsd">
更改tomcat服務(wù)監(jiān)聽(tīng)端口
<Connector port="8080" address="172.16.100.1" />
關(guān)閉war自動(dòng)部署
<Host name="localhost" appBase=""
unpackWARs="false" autoDeploy="false">
禁用tomcat管理頁(yè)面
刪除webapps目錄下的所有文件,還涉及到管理頁(yè)面的2個(gè)配置文件host-manager.xml和manager.xml也要?jiǎng)h
除,這兩個(gè)文件在tomcat安裝 目錄下的conf/Catalina/localhost目錄下。
使用普通用戶啟動(dòng)tomcat
在啟動(dòng)之前需要將tomcat安裝目錄下所有文件的屬主和屬組都設(shè)置為指定的用戶。
tomcat生產(chǎn)服務(wù)器性能優(yōu)化
tomcat內(nèi)存優(yōu)化
tomcat內(nèi)存優(yōu)化主要是對(duì)tomcat啟動(dòng)參數(shù)優(yōu)化,我們可以在tomcat啟動(dòng)腳本catalina.sh中設(shè)置JAVA——OPTS參
數(shù)。
JAVA_OPTS='-server -Xms2048m -Xmx2048m -XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m'
參數(shù)說(shuō)明:
-server 啟用jdk 的 server 版;
-Xms java虛擬機(jī)初始化時(shí)的最小內(nèi)存;
-Xmx java虛擬機(jī)可使用的最大內(nèi)存;
-XX:PermSize 內(nèi)存永久保留區(qū)域
-XX:MaxPermSize 內(nèi)存最大永久保留區(qū)域
-Xmx 默認(rèn)為物理內(nèi)存的1/4, 實(shí)際建議不大于4GB;一般建議設(shè)置-Xms = -Xmx
-server 一定要作為第一個(gè)參數(shù),在多個(gè)cpu時(shí)性能 佳
-Xms 初始heap大小,使用的最小內(nèi)存,cpu性能 高時(shí)可以設(shè)置的大一些

浙公網(wǎng)安備 33010602011771號(hào)