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環境準備
[[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]
安裝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入門