1、Tomcat 安裝
- 官網:http://tomcat.apache.org/
- Tomcat8官網下載地址:http://tomcat.apache.org/download-80.cgi
- 爲了便於文件管理,我的習慣 在/opt目錄下建立 一個install目錄用於存放 軟件安裝包,在/usr 目錄下建立local文件夾用戶存放解壓文件
- 下載安裝包: wget http://apache.fayea.com/tomcat/tomcat-8/v8.0.32/bin/apache-tomcat-8.0.32.tar.gz
- 解壓壓縮包: tar -zxvf apache-tomcat-8.0.32.tar.gz
- 移動解壓文件到 mv apache-tomcat-8.0.32/ /usr/local/
- 爲方便起見,可使用 mv /usr/local/apache-tomcat-8.0.32/ /usr/local/tomcat8/ 修改目錄名稱
設置端口防火牆:
centos7如下版本設置方法:
方法一:便於測試,能夠先關閉關閉 iptables,防止端口攔截沒法進行測試:service iptables stop
方法二:在iptables中添加容許規則(如下以Tomcat默認端口8080爲例),操做步驟以下:
一、添加規則 sudo iptables -I INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
二、保存規則:
sudo /etc/rc.d/init.d/iptables save
三、重啓iptables: sudo service iptables restart
centos7設置方法:
開啓端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
命令含義:
--zone #做用域
--add-port=80/tcp #添加端口,格式爲:端口/通信協議
--permanent #永久生效,沒有此參數重啓後失效
重啓防火牆
firewall-cmd --reload
Tomcat服務啓動中止:
啓動tomcat:sh /usr/local/tomcat8/bin/startup.sh
查看日誌:tail -200f /usr/local/tomcat8/logs/catalina.out
中止tomcat: sh /usr/local/tomcat8/bin/shutdown.sh
2、Tomcat 安全配置與優化
2.1優化server.xml
2.1.1 隱藏版本信息
編輯server.xml: vi /usr/local/tomcat8/conf/server.xml javascript
爲Connector 添加 server 屬性
- <span style="font-family:Consolas, Liberation Mono, Menlo, Courier, monospace;"> </span><span style="font-family:Microsoft YaHei;"> <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" server="APP Srv1.0"/></span>
針對該信息的顯示是由一個jar包控制的,該jar包存放在 Tomcat 安裝目錄下的lib目錄下,名稱爲 catalina.jar。
咱們能夠經過 jar xf 命令解壓這個 jar 包會獲得兩個目錄 META-INF 和 org ,經過修改 org/apache/catalina/util/ServerInfo.properties 文件中 的 serverinfo 字段來實現來更改咱們tomcat的版本信息。css
文件信息以下:html
[root@localhost ~]
server.info=Apache Tomcat
/8
.0.23
server.number=8.0.23.0
server.built=Mar 18 2016 20:31:49 UTC
還有另一種方法來實現隱藏或假裝Tomcat的版本信息,其本質和上面同樣,操做以下:
[root@localhost ~]
[root@localhost lib]
[root@localhost lib]
[root@localhost util]
server.info=nolinux
修改效果以下:前端
![](http://static.javashuo.com/static/loading.gif)
2.1.2禁用Tomcat管理界面
生產環境通常不適用Tomcat默認的管理界面,這些頁面存放在Tomcat 的webapps安裝目錄下,java
把該目錄下的全部文件刪除便可:rm -rf /usr/local/tomcat8/webapps/*linux
另外刪除相關的配置文件 host-manager.xml 和 manager.xml,在Tomcat 安裝目錄 conf/Catalina/localhost目錄下。nginx
註釋或刪除tomcat_user.xml 中的全部用戶權限。git
2.1.3 應用程序安全
tomcat默認 開啓了對war熱部署。爲了防止被植入木馬惡意攻擊,咱們要關閉war包自動部署。github
關閉自動加載最新代碼(設置reloadable)web
修改實例:
- <Host name="localhost" appBase="webapps"
- unpackWARs="false" autoDeploy="false"
- reloadable="false">
2.1.4 更改關閉Tomcat的指令
server.xml中定義了能夠直接關閉 Tomcat 實例的管理端口。咱們經過 telnet 鏈接上該端口以後,輸入 SHUTDOWN (此爲默認關閉指 令)便可關閉 Tomcat 實例(注意,此時雖然實例關閉了,可是進程仍是存在的)。因爲默認關閉 Tomcat 的端口和指令都很簡單。默認端口爲 8005,指令爲SHUTDOWN 。所以咱們須要將關閉指令修改複雜一點。
固然,在新版的 Tomcat 中該端口僅監聽在127.0.0.1上,所以你們也沒必要擔憂。除非黑客登錄到tomcat本機去執行關閉操做。
修改實例:
<Server port="8005" shutdown="9SDKJ29jksjf23sjf0LSDF92JKS9DKkjsd">
或者禁用8005端口
<Server port="-1" shutdown="SHUTDOWN">
2.1.5 鏈接池配置
使用線程池,用較少的線程處理較多的訪問,能夠提升tomcat處理請求的能力。
編輯配置文件 server.xml : vi /usr/local/tomcat8/conf/server.xml
2.1.5.1 打開被註釋的默認鏈接池配置
默認配置:
- <!--
- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
- maxThreads="150" minSpareThreads="4"/>
- -->
修改實例:
- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
- maxThreads="150" minSpareThreads="100"
- prestartminSpareThreads="true" maxQueueSize="100"/>
參數講解:
- name: 線程名稱
- namePrefix: 線程前綴
- maxThreads : 最大併發鏈接數,不配置時默認200,通常建議設置500~ 800 ,要根據本身的硬件設施條件和實際業務需求而定。
- minSpareThreads:Tomcat啓動初始化的線程數,默認值25
- prestartminSpareThreads:在tomcat初始化的時候就初始化minSpareThreads的值, 不設置true時minSpareThreads
- maxQueueSize: 最大的等待隊列數,超過則拒絕請求
2.1.5.2 修改連接配置
默認配置:
- <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
修改配置:
- <Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
- connectionTimeout="20000"
- redirectPort="8443"
- executor="tomcatThreadPool"
- enableLookups="false"
- acceptCount="100"
- maxPostSize="10485760"
- compression="on"
- disableUploadTimeout="true"
- compressionMinSize="2048"
- noCompressionUserAgents="gozilla, traviata"
- acceptorThreadCount="2"
- compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
- URIEncoding="utf-8"/>
參數講解:
- port:鏈接端口。
- protocol:鏈接器使用的傳輸方式。 Tomcat 8 設置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol
- protocol, Tomcat 六、7 設置 nio 更好:org.apache.coyote.http11.Http11NioProtocol
注:
每一個web客戶端請求對於服務器端來講就一個單獨的線程,客戶端的請求數量增多將會致使線程數就上去了,CPU就忙着 跟線程切換。
而NIO則是使用單線程(單個CPU)或者只使用少許的多線程(多CPU)來接受Socket,而由線程池來處理堵塞在pipe 或者隊 列裏的請求.這樣的話,只要OS能夠接受TCP的鏈接,web服務器就能夠處理該請求。大大提升了web服務器的可伸縮性。
- executor: 鏈接器使用的線程池名稱
- enableLookups:禁用DNS 查詢
- acceptCount:指定當全部可使用的處理請求的線程數都被使用時,能夠放處處理隊列中的請求數,超過這個數的請求將不予處理,默認設置 100 。
- maxPostSize:限制 以FORM URL 參數方式的POST請求的內容大小,單位字節,默認是 2097152(2兆),10485760 爲 10M。若是要禁用限制,則能夠設置爲 -1。
- acceptorThreadCount: 用於接收鏈接的線程的數量,默認值是1。通常這個指須要改動的時候是由於該服務器是一個多核CPU,若是是多核 CPU 通常配置爲 2。
- compression:傳輸時是壓縮。
- compressionMinSize:壓縮的大小
- noCompressionUserAgents:不啓用壓縮的瀏覽器
提示:
壓縮會增長Tomcat負擔,最好採用Nginx + Tomcat 或者 Apache + Tomcat 方式,壓縮交由Nginx/Apache 去作。
Tomcat 的壓縮是在客戶端請求服務器對應資源後,從服務器端將資源文件壓縮,再輸出到客戶端,由客戶端的瀏覽器負責解壓縮並瀏覽。相對於普通的 瀏覽過程 HTML、CSS、Javascript和Text,它能夠節省40% 左右的流量。更爲重要的是,它能夠對動態生成的,包括CGI、PHP、JSP、ASP、Servlet,SHTML等輸出的網頁也能進行壓縮,壓縮效率也很高。
2.1.6 管理AJP端口
AJP是爲 Tomcat 與 HTTP 服務器之間通訊而定製的協議,能提供較高的通訊速度和效率。若是tomcat前端放的是apache的時候,會使用到AJP這個鏈接 器。 默認是開啓的。若是不使用apache,註釋該鏈接器。
實例:
- <span style="font-family:Microsoft YaHei;">
2.3 應用程序部署
默認tomcat是root身份運行的,這樣不安全。不要使用root用戶啓動tomcat。Java程序與C程序不一樣。nginx,httpd 使用root用戶啓動守護80端口,子進程/線程會經過setuid(),setgid()兩個函數切換到普通用戶。即父進程全部者是root用戶,子進程與多線程全部者是一個非root用戶,這個用戶沒有shell,沒法經過ssh與控制檯登錄系統,Java 的JVM 是與系統無關的,是創建在OS之上的,你使用什麼用戶啓動Tomcat,那麼Tomcat 就會繼承該全部者的權限。爲了防止 Tomcat 被植入 web shell 程序後,能夠修改項目文件。所以咱們要將 Tomcat 和項目的屬主作分離,這樣子,即使被搞,他也沒法建立和編輯項目文件。
設置普通用戶,用來啓動tomcat
1
2
3
4
5
6
|
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
|
參考資料:
https://github.com/judasn/Linux-Tutorial/blob/master/Tomcat-Install-And-Settings.md
http://nolinux.blog.51cto.com/4824967/1608940
centos7設置防火牆:http://stackoverflow.com/questions/24729024/centos-7-open-firewall-port
JVM模型:http://xmuzyq.iteye.com/blog/599750