標籤:ogg 記憶體回收 span 統一 資訊隱藏 規則 情況 XML 利用
一、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(標準通用標記語言 (SGML)下的一個應用)頁面的訪問請求。實際上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/jdkexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATHexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jarexport 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/bashusage() {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 $TPIDsleep 3STAT=$(ps -ef|grep java|grep tomcat|grep -v grep|awk ‘{print $2}‘)if [ -z $STAT ];thenecho ‘tomcat stoped...‘elsekill -9 $STATfi}restart_tomcat(){stop_tomcatstart_tomcat}main(){case $1 instart)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]$ lltotal 8drwxr-xr-x 14 tomcat tomcat 4096 Mar 19 21:57 docsdrwxr-xr-x 6 tomcat tomcat 78 Mar 19 21:57 examplesdrwxr-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入門