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-manager
,examples
,docs
目錄直接移除。
Tomcat 安全設置
- 管理端口配置
系統監聽的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
:
" 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 – 指定最大堆內存