1. 程式人生 > >web服務器tomcat入門

web服務器tomcat入門

release jmx kit pat windows 準備 ava nginx tun

一、tomcat介紹
1.1 引入tomcat

  Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。由於有了Sun 的參與和支持,最新的Servlet 和JSP 規範總是能在Tomcat 中得到體現,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 規範。因為Tomcat 技術先進、性能穩定,而且免費,因而深受Java 愛好者的喜愛並得到了部分軟件開發商的認可,成為目前比較流行的Web 應用服務器。
  tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和並發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。對於一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 服務器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat 部分是Apache 服務器的擴展,但它是獨立運行的,所以當你運行tomcat 時,它實際上作為一個與Apache 獨立的進程單獨運行的。

1.2 常用的java-web服務

開源軟件
tomcat resin jboss
商業軟件
weblogic websphere

二、java概念解釋
JDK
簡單的說JDK是面向開發人員使用的SDK,它提供了Java的開發環境和運行環境。SDK是Software Development Kit 一般指軟件開發包,可以包括函數庫、編譯程序等
JRE
JRE(Java Runtime Environment,Java運行環境),也就是Java平臺。所有的Java程序都要在JRE下才能運行。JDK的工具也是Java程序,也需要JRE才能運行。為了保持JDK的獨立性和完整性,在JDK的安裝過程中,JRE也是安裝的一部分。所以,在JDK的安裝目錄下有一個名為jre的目錄,用於存放JRE文件。
SDK
SDK(Software Develop Kit,軟件開發工具包),用於幫助開發人員的提高工作效率。各種不同類型的軟件開發,都可以有自己的SDK。Windows有Windows SDK,DirectX 有 DirectX 9 SDK,.NET開發也有Microsoft .NET Framework SDK。JAVA開發也不含糊,也有自己的Java SDK。
JVM
JVM(Java Virtual Machine,Java虛擬機)是JRE的一部分。它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。JVM有自己完善的硬件架構,如處理器、堆棧、寄存器等,還具有相應的指令系統。Java語言最重要的特點就是跨平臺運行。使用JVM就是為了支持與操作系統無關,實現跨平臺

三、tomcat環境準備

[[email protected] ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

四、源碼安裝啟動tomcat
#統一線上web服務用戶的uid
[[email protected] ~]# useradd -u 1001 tomcat
[[email protected] ~]# id tomcat
uid=1001(tomcat) gid=1001(tomcat) groups=1001(tomcat)

下載jdk和tomcat

[[email protected]
/* */ ~]# cd /usr/local/src/ [[email protected] ~]# wget http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz [[email protected] ~]# wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.14/bin/apache-tomcat-8.5.14.tar.gz

安裝Jdk和tomcat

[[email protected] src]# tar zxf jdk-8u131-linux-x64.gz 
[[email protected] src]# mv jdk1.8.0_131/ /usr/local/
[[email protected] src]# ln -s /usr/local/jdk1.8.0_131/ /usr/local/jdk
[[email protected] src]# tar zxf apache-tomcat-8.5.14.tar.gz 
[[email protected] src]# mv apache-tomcat-8.5.14 /usr/local/
[[email protected] src]# ln -s /usr/local/apache-tomcat-8.5.14/ /usr/local/tomcat

設置環境變量

[[email protected] src]# echo "export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/usr/local/tomcat" >> /etc/profile
[[email protected] src]# source /etc/profile

測試java環境變量是否生效
[[email protected] src]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

使用tomcat用戶啟動tomcat(這樣可以起到一定的安全防範作用,如果被入侵拿到的也只是tomcat權限)

[[email protected] src]# chown -R tomcat.tomcat /usr/local/tomcat/
[[email protected] src]# cd /usr/local/tomcat/bin/
[[email protected] bin]# ./startup.sh

技術分享

查看8080端口
[[email protected] bin]# netstat -tunlp |grep 8080
tcp6 0 0 :::8080 :::* LISTEN 62872/java

根據啟動腳本編寫重啟腳本如下
# vim tomcat.sh

#!/bin/bash
usage() {
echo "Usage: $0 [start|stop|restart|status]"
}

start_tomcat(){
/usr/local/tomcat/bin/startup.sh
}
status_tomcat(){
ps -ef|grep java|grep tomcat|grep -v grep
}
stop_tomcat(){
TPID=$(ps -ef|grep java|grep tomcat|grep -v grep|awk {print $2})
kill -9 $TPID
sleep 3
STAT=$(ps -ef|grep java|grep tomcat|grep -v grep|awk {print $2})
if [ -z $STAT ];then
echo tomcat stoped...
else
kill -9 $STAT
fi
}
restart_tomcat(){
stop_tomcat
start_tomcat
}

main(){
case $1 in

start)
start_tomcat;;
stop)
stop_tomcat;;
restart)
restart_tomcat;;
status)
status_tomcat;;
*)
usage;
esac
}
main $1

五、學習tomcat配置文件
5.1 學習server.xml

<Connector port="8080" protocol="HTTP/1.1" #http監聽8080端口
connectionTimeout="20000"
redirectPort="8443" /> #https 8443端口
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> #AJP通信方式8009端口
<Server port="8005" shutdown="SHUTDOWN">
<Listener # telent端口 className="org.apache.catalina.startup.VersionLoggerListener" />

##5.2 學習 tomcat-users.xml

[[email protected] webapps]$ pwd
/usr/local/tomcat/webapps #tomcat 默認的根路徑
[[email protected] webapps]$ ll
total 8
drwxr-xr-x 14 tomcat tomcat 4096 Mar 19 21:57 docs
drwxr-xr-x 6 tomcat tomcat 78 Mar 19 21:57 examples
drwxr-xr-x 5 tomcat tomcat 82 Mar 19 21:57 host-manager #用戶管理,登錄使用
drwxr-xr-x 5 tomcat tomcat 97 Mar 19 21:57 manager 
drwxr-xr-x 3 tomcat tomcat 4096 Mar 19 21:57 ROOT #默認的訪問路徑

修改tomcat-users.xml,配置一個登錄用戶tomcat

生產環境關閉app管理和主機管理的方法,具體文件再進行具體調整

[[email protected] webapps]$ mv host-manager/ examples/ /tmp/
111
啟動tomcat的註意事項,每次啟動都會生成temp和work目錄,實際生產環境建議每次tomcat啟動都將此兩個目錄情況情況,否則會因為緩存問題產生異常

六、生產環境tomcat規範
telnet管理端口保護
   更改8005(更改為8000~8999之間即可)端口,和SHOTDOWN字符串
ajp鏈接端口保護,或者直接註釋配置文件
   更改8005(更改為8000~8999之間即可)端口,通過iptables限制此端口,或者直接註釋配置文件
禁用管理
   1)刪除默認的{Tomcat安裝目錄}/conf/tomcat-users.xml文件,重啟tomcat後將會自動生成新的文件;
   2)刪除{Tomcat安裝目錄}/webapps下默認的所有目錄和文件;
   3)將tomcat 應用根目錄配置為tomcat安裝目錄以外的目錄;
降權啟動
   1)tomcat啟動用戶權限必須為非root權限,盡量降低tomcat啟動用戶的目錄訪問權限;
   2)如需直接對外使用80端口,可通過普通賬號啟動後,配置iptables規則進行轉發;
文件列表訪問限制
   conf/web.xml文件中default部分listings的配置必須為false;
版本信息隱藏
   1)修改conf/web.xml,重定向403、404以及500等錯誤到指定的錯誤頁面;
   2)也可以通過修改應用程序目錄下的WEB-INF/web.xml下的配置進行錯誤頁面的重定向;
Server header重寫
   在HTTP Connector配置中加入server的配置,server="chuck-server"
通過配置,限定訪問的ip來源
   allow="61.148.18.138,61.135.165." deny="...*"/
起停腳本權限回收
   去除其他用戶對Tomcat的bin目錄下shutdown.sh、startup.sh、catalina.sh的可執行權限
訪問日誌格式規範
   開啟Tomcat默認訪問日誌中的Referer和User-Agent記錄
關閉自動部署(根據自己實際情況)
   autoDeploy="false">

七、tomcat的調優
7.1 外部調優

操作系統調優,JVM調優
1)調整JVM內存使用
2)使用什麽垃圾回收器
nginx代理調優

7.2 內部調優

maxThreads="150" #最大線程數
minSpareThreads="4" #初始化創建的線程數
maxSpareThreads="500" #一旦創建的線程超過這個值,tomcat就會關閉不在需要的socket線程
acceptCount="700" #指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊裏的請求數,超過這個數將不予處理
compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" #tomcat壓縮,壓縮起始大小為2048K和壓縮類型
enableLookups="false" #關閉dns查詢
disableUploadTimeout="25" #關閉上傳超時
connectionTimeout="20000" #鏈接超時
SSLEnabled="true" #開啟ssl加密,https時使用 
附生產實際配置文件一個

<Connector port="8080" 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"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
SSLEnabled="true"
scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/tomcat2/conf/shnlap93.jks" keystorePass="aaaaaa"
/>


7.3 開啟jvm遠程查看

更改啟動參數

echo "CATALINA_OPTS="$CATALINA_OPTS 
-Dcom.sun.management.jmxremote # 啟用遠程調用
-Dcom.sun.management.jmxremote.port=12345 #端口12345
-Dcom.sun.management.jmxremote.authenticate=false #關閉驗證 
-Dcom.sun.management.jmxremote.ssl=false #關閉ssl加密
-Djava.rmi.server.hostname=192.168.3.198"" >> /usr/local/tomcat/bin/catalina.sh

打開jvisualvm,可同時鏈接多個jvm主機

技術分享

web服務器tomcat入門