1. 程式人生 > >Apache Tomcat 8.5 安全配置與高併發優化

Apache Tomcat 8.5 安全配置與高併發優化

https://www.renwole.com/archives/357

通常我們在生產環境中,Tomcat的預設配置顯然不能滿足我們的產品需求,所以很多時候都需要對Tomcat的配置進行調優,以下綜合我自己的經驗來配置 Tomcat 安全與優化情況,如果你有更好的方案,請留言,我會參考並迦納進去。

1.編輯修改配置檔案:

# vim /usr/program/tomcat8/conf/server.xml

2.禁用8005埠

telnet localhost 8005 然後輸入 SHUTDOWN 就可以關閉 Tomcat,為了安全我們要禁用該功能

預設值:

<Server port="8005" shutdown="SHUTDOWN">

修改為:

<Server port="-1" shutdown="SHUTDOWN">

3.應用程式安全&關閉自動部署

預設值:

<Host name="localhost" appBase="webapps"
 unpackWARs="true" autoDeploy="true">

修改為:

<Host name="localhost" appBase="webapps"
 unpackWARs="false" autoDeploy="false" reloadable="false">

4.maxThreads 連線數限制修改配置

預設值:

<!--
 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
 maxThreads="150" minSpareThreads="4"/>
 -->

修改為:

<Executor
 name="tomcatThreadPool"
 namePrefix="catalina-exec-"
 maxThreads="500"
 minSpareThreads="30"
 maxIdleTime="60000"
 prestartminSpareThreads = "true"
 maxQueueSize = "100"
/>

引數解釋:

maxThreads:最大併發數,預設設定 200,一般建議在 500 ~ 800,根據硬體設施和業務來判斷
minSpareThreads:Tomcat 初始化時建立的執行緒數,預設設定 25
maxIdleTime:如果當前執行緒大於初始化執行緒,那空閒執行緒存活的時間,單位毫秒,預設60000=60秒=1分鐘。
prestartminSpareThreads:在 Tomcat 初始化的時候就初始化 minSpareThreads 的引數值,如果不等於 true,minSpareThreads 的值就沒啥效果了
maxQueueSize:最大的等待佇列數,超過則拒絕請求

5.Connector 引數優化配置

預設值:

<Connector 
 port="8080" 
 protocol="HTTP/1.1" 
 connectionTimeout="20000" 
 redirectPort="8443" 
 />

修改為:

<Connector
 executor="tomcatThreadPool"
 port="8080"
 protocol="org.apache.coyote.http11.Http11Nio2Protocol"
 connectionTimeout="60000"
 maxConnections="10000"
 redirectPort="8443"
 enableLookups="false"
 acceptCount="100"
 maxPostSize="10485760"
 maxHttpHeaderSize="8192"
 compression="on"
 disableUploadTimeout="true"
 compressionMinSize="2048"
 acceptorThreadCount="2"
 compressableMimeType="text/html,text/plain,text/css,application/javascript,application/json,application/x-font-ttf,application/x-font-otf,image/svg+xml,image/jpeg,image/png,image/gif,audio/mpeg,video/mp4"
 URIEncoding="utf-8"
 processorCache="20000"
 tcpNoDelay="true"
 connectionLinger="5"
 server="Server Version 11.0"
 />

引數解釋:

protocol:Tomcat 8 設定 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol
protocol:Tomcat 6 設定 nio 更好:org.apache.coyote.http11.Http11NioProtocol
protocol:Tomcat 8 設定 APR 效能飛快:org.apache.coyote.http11.Http11AprProtocol 更多詳情:《Tomcat 8.5 基於 Apache Portable Runtime(APR)庫效能優化
connectionTimeout:Connector接受一個連線後等待的時間(milliseconds),預設值是60000。
maxConnections:這個值表示最多可以有多少個socket連線到tomcat上
enableLookups:禁用DNS查詢
acceptCount:當tomcat起動的執行緒數達到最大時,接受排隊的請求個數,預設值為100。
maxPostSize:設定由容器解析的URL引數的最大長度,-1(小於0)為禁用這個屬性,預設為2097152(2M) 請注意, FailedRequestFilter 過濾器可以用來拒絕達到了極限值的請求。
maxHttpHeaderSize:http請求頭資訊的最大程度,超過此長度的部分不予處理。一般8K。
compression:是否啟用GZIP壓縮 on為啟用(文字資料壓縮) off為不啟用, force 壓縮所有資料
disableUploadTimeout:這個標誌允許servlet容器使用一個不同的,通常長在資料上傳連線超時。 如果不指定,這個屬性被設定為true,表示禁用該時間超時。
compressionMinSize:當超過最小資料大小才進行壓縮
acceptorThreadCount:用於接受連線的執行緒數量。增加這個值在多CPU的機器上,儘管你永遠不會真正需要超過2。 也有很多非維持連線,您可能希望增加這個值。預設值是1。
compressableMimeType:配置想壓縮的資料型別
URIEncoding:網站一般採用UTF-8作為預設編碼。
processorCache:協議處理器快取的處理器物件來提高效能。 該設定決定多少這些物件的快取。-1意味著無限的,預設是200。 如果不使用Servlet 3.0非同步處理,預設是使用一樣的maxThreads設定。 如果使用Servlet 3.0非同步處理,預設是使用大maxThreads和預期的併發請求的最大數量(同步和非同步)。
tcpNoDelay:如果設定為true,TCP_NO_DELAY選項將被設定在伺服器套接字,而在大多數情況下提高效能。這是預設設定為true。
connectionLinger:秒數在這個聯結器將持續使用的套接字時關閉。預設值是 -1,禁用socket 延遲時間。
server:隱藏Tomcat版本資訊,首先隱藏HTTP頭中的版本資訊

6.隱藏或修改 Tomcat 版本號

 # cd /usr/local/tomcat/lib/
 # unzip catalina.jar
 # cd org/apache/catalina/util
 # vim ServerInfo.properties
 server.info=Apache Tomcat/8.5.16
 server.number=8.5.16.0
 server.built=Jun 21 2017 17:01:09 UTC

將以上去掉或修改版本號即可。

7.刪除禁用預設管理頁面以及相關配置檔案

 # rm -rf /usr/local/apache-tomcat-8.5.16/webapps/*
 # rm -rf /usr/local/apache-tomcat-8.5.16/conf/tomcat-users.xml

參考內容:
https://tomcat.apache.org/tomcat-8.5-doc/config/
https://github.com/judasn/Linux-Tutorial/blob/master/Tomcat-Install-And-Settings.md
http://wiki.jikexueyuan.com/project/linux-in-eye-of-java/Tomcat-Install-And-Settings.html
http://netkiller.github.io/journal/tomcat.html
http://zjliu.me/2015/12/14/tomcat-config-connector/