Tomcat簡介

JAVA介紹

Java有很多常見的名詞,由于java是通過過java虛擬機運行的,所以在運行java的主機上需要配置java環境,常見的名詞有如下幾種:

  • JDK: Java 開發工具
  • JRE: Java運行環境
  • SDK:軟件開發工具,包含一系列工具包
  • J2EE: Java平臺企業版
  • J2SE: Java平臺標準版
  • J2ME: Java平臺微型版(手機端等)

Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬于輕量級應用,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。

Tomcat安裝部署

Tomcat需要java的運行環境,在安裝Tomcat時,需要安裝JDK.

yum install java -y

在官方下載pache-tomcat-8.5.9.tar.gz, 解壓到/usr/local目錄下,并創建軟鏈接:

ln -s  /usr/local/apache-tomcat-8.5.9    /usr/local/tomcat

添加系統賬戶tomcat,并添加文件權限:

useradd  -u 1001 tomcat 
chown -R  tomcat:tomcat  /usr/local/tomcat

啟動tomcat:

 /usr/local/tomcat/bin/startup.sh 

通過查看端口,可以發現啟動了8080,8005和8009端口:

[root@localhost local]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp6       0      0 :::8009                 :::*                    LISTEN      9229/java           
tcp6       0      0 :::8080                 :::*                    LISTEN      9229/java                 
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      9229/java      

tomcat的服務器主配置文件在/usr/local/tomcat/conf/server.xml中,其中指定了默認的3個端口:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  • 8080: web服務器訪問的端口
  • 8009:AJP包重定向協議端口,用于本機對其它web服務器發起的連接
  • 8005:用于發送shutdown指令,生產情況下需要修改此端口和命令。

tomcat的站點根目錄為:/usr/local/tomcat/webapps/ROOT
當修改tomcat的配置文件之后需要重啟服務(使用tomcat用戶):

$ /usr/local/tomcat/bin/shutdown.sh
$ /usr/local/tomcat/bin/startup.sh 

提示:在生產環境中,有時通過tomcat自帶的腳本是無法停止服務的,一般會自定義腳本,使用kill 命令來結束進程,也可以多次使用kill -9 命令終止服務。
在重啟tomcat服務前,需要刪除上次啟動服務所加載的緩存文件,默認目錄為/usr/local/tomcat/work/usr/local/tomcat/temp 避免緩存原因造成不必要的問題。

Tomcat 服務狀態管理

Tomcat在默認的其實頁面列出了后端管理的選項,生產中可以利用這些狀態參數監控tomcat服務器的運行情況。在默認的設置中,是沒有權限查看的,如果要實現特定IP段訪問Tomcat服務器服務狀態信息,需要配置tomcat-users.xml文件。
添加用的訪問權限,在/usr/local/tomcat/conf/tomcat-users.xml末尾添加用戶和授權:

# vim /usr/local/tomcat/conf/tomcat-users.xml 

 <role rolename="manager-gui" />
 <role rolename="admin-gui" />
 <user username="tomcat" password="1qaz2wsx" roles="manager-gui" />
</tomcat-users>

修改上述文件需要重啟tomcat,配置完成之后就可以在本機訪問后端的管理信息。
如果讓除本機之外的其他IP段訪問tomcat管理節點信息,需要修改context.xml
Tomcat在8.5.4及以上版本對<tomcat>/webapps/manager/META-INF/context.xml 做出了調整,只需要修改對應的allow IP正則部分即可:

<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>

將127部分修改為其他網段的地址,\d 表示[0-9],如果只是單獨修改此 context.xml 不需要重啟tomcat即可生效。

為了安全,需要移除多余的后臺管理組件,可以將/usr/local/tomcat/webapps目錄下的host-managerexamples,docs目錄直接移除。

Tomcat 安全設置

  1. 管理端口配置
    系統監聽的8005端口可以實現關閉tomcat服務,這里需要關閉此端口或修改SHUTDOWN命令:
# netstat -lntp|grep 8005
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      10914/java          

在配置文件server.xml將端口修改為8792,SHUTDOWN命令修改為DONTTUCH:

<Server port="8792" shutdown="DONTTOUCH">

重啟tomcat后端口改變,即時連上此端口,使用原來的SHUTDOWN命令也無法關閉tomcat了:

# netstat -lntp|grep 8792
tcp6       0      0 127.0.0.1:8792          :::*                    LISTEN      11000/java          

8009 ajp端口的管理也需要進行配置,默認情況下可以關閉此端口。
將配置文件中的此項配置注釋掉:

   <!--
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 
    -->
  • 禁用管理端
    • 刪除安裝目錄下默認的conf/tomcat-user.xml文件,重啟tomcat。
    • 刪除tomcat安裝目錄webapps中的默認所有文件和目錄
    • 將tomcat應用根目錄配置為tomcat安裝目錄之外的其他目錄,添加docBase:
    <Context path="webapps" docBase="/home/work/local/tomcat_webapps" debug="0
    " reloadable="false" crossContext="true" />

* 降權設置
  - 禁止root權限用戶啟動服務,盡量降低tomcat用戶的目錄訪問權限。如果要使用80端口,可以配置iptables進行轉發。
  - 文件列表的訪問控制:`conf/web.xml`文件listings的配置文件必須為false(默認為false)禁止讀取文件列表。
    ```
    <param-name>listings</param-name>
    <param-value>false</param-value>
  • 版本信息的隱藏:
    修改conf/web.xml中定向到403,404,500等錯誤頁面到指定的錯誤頁,從而避免tomcat返回的錯誤頁面中暴露的系統版本信息。
    也可以通過修改應用程序目錄下的WEB-INF/web.xml下的配置進行錯誤頁面的重定向。

  • 修改header請求頭,修改header響應的請求頭信息,在HTTP Connector配置中加入server的配置:

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

$ curl --head http://172.16.10.60:8080/
HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 10 Jan 2017 07:08:25 GMT
Server: TRYINH



####Tomcat調優
Tomcat調優主要是對Tomcat自身內部進行調優和對外部應用和組件進行調優,外部的調優主要是操作系統,JVM,Nginx代理等,Tomcat自身的調優主要是禁止DNS查詢,調整線程數,壓縮等。
1. 禁止DNS查詢
 當web應用程序要記錄客戶端的信息時,會記錄客戶端的IP地址或者通過域名服務器查找機器名 轉換為IP地址,但是DNS查詢需要占用網絡,并且包括可能從很多很遠的服務器或者不起作用的服務器上去獲取對應的IP,這樣會消耗一定的時間。修改`server.xml`文件中的Connector元素,修改屬性enableLookups參數值為*false*,若為false則不進行DNS查詢,而是返回其ip地址:

<Connector
port="8887" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" />

* 調整線程數
   maxThreads="600"       ///最大線程數
  minSpareThreads="100"    ///初始化時創建的線程數maxSpareThreads="500"    ///一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程。
acceptCount="700"     //指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理

<Connector port="80" protocol="HTTP/1.1" maxThreads="600" minSpareThreads="100"
maxSpareThreads="500" acceptCount="700" connectionTimeout="20000" redirectPort="8443" />

* 啟用壓縮
Tomcat有一個通過在server.xml配置文件中設置壓縮的選項。壓縮可以在connector像如下設置中完成:

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8181" compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" />


* JVM堆內存優化
   Tomcat默認的內存參數比較小,在實際的生產環境中容易造成性能瓶頸,這種解決方法是通過增加JVM的棧內存實現的.在 linux系統下,內存優化需要修改TOMCAT_HOME/bin/catalina.sh,在文件末尾添加如下內容(最大堆內存是1024m):

JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai"

-Xms – 指定初始化時化的堆內存
-Xmx – 指定最大堆內存







最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容