web服務器tomcat入門實戰


一、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環境准備

[root@node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

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

下載jdk和tomcat

[root@node1 ~]# cd /usr/local/src/
[root@node1 ~]# wget http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz

[root@node1 ~]# wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.14/bin/apache-tomcat-8.5.14.tar.gz

 

安裝Jdk和tomcat

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

 

設置環境變量

[root@node1 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
[root@node1 src]# source /etc/profile

 

測試java環境變量是否生效
[root@node1 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權限)

[root@node1 src]# chown -R tomcat.tomcat /usr/local/tomcat/
[root@node1 src]# cd /usr/local/tomcat/bin/
[root@node1 bin]# ./startup.sh

 

查看8080端口
[root@node1 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

[tomcat@node1 webapps]$ pwd
/usr/local/tomcat/webapps #tomcat 默認的根路徑
[tomcat@node1 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管理和主機管理的方法,具體文件再進行具體調整

[tomcat@node1 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主機


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM