Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 精品久久久影院,最近中文字幕完整视频高清10,国产在线视频网

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          Nginx+Tomcat的配合使用

          Nginx+Tomcat的配合使用

          期嘗試使用tomcat和Nginx進(jìn)行配合做負(fù)載均衡和靜態(tài)與動態(tài)資源分配的Demo,期間遇到很多有意思的地方和知識短板,特此記錄

          一:什么是Nginx?

           Nginx也是一款服務(wù)器,我們常用它做如:反向代理、負(fù)載均衡、動態(tài)與靜態(tài)資源的分離的工作
           反向代理:相對應(yīng)的是正向代理,如果你使用過代理服務(wù)器的話就明白,我們訪問某一個網(wǎng)站并非直接訪問目標(biāo)網(wǎng)站,而是告訴代理服務(wù)器我需要訪問什么目標(biāo)網(wǎng)站,由代理服務(wù)器發(fā)出請求給目標(biāo)網(wǎng)站,將目標(biāo)網(wǎng)站訪問結(jié)果再轉(zhuǎn)發(fā)給你,此時,你是請求代理方。而反向代理是此時代理服務(wù)器做服務(wù)器的代理,我們的訪問請求并非直接訪問到目標(biāo)服務(wù)器上,而是訪問代理服務(wù)器,由代理服務(wù)器決定什么樣的請求以什么樣的方式訪問正式服務(wù)器
           負(fù)載均衡:目前大多數(shù)的網(wǎng)站都會采用負(fù)載均衡手段來針對目前用戶的指數(shù)級增長來減少對單點(diǎn)服務(wù)器的負(fù)載壓力,比如目前我們擁有3臺真實(shí)服務(wù)器,我們需要根據(jù)相應(yīng)策略決定什么樣的用戶請求分配到哪個真實(shí)服務(wù)器,比如按照輪詢的方式,用戶請求挨個到達(dá)代理服務(wù)器,此時代理服務(wù)器按照第一個請求轉(zhuǎn)發(fā)至第一臺真實(shí)服務(wù)器,第二個請求轉(zhuǎn)發(fā)到第二個服務(wù)器上,依次類推,這樣可以防止大量的用戶請求全部訪問到同一臺物理機(jī)上,單點(diǎn)物理機(jī)的性能始終有限的,當(dāng)然這可能對服務(wù)器數(shù)據(jù)訪問時候造成事務(wù)性的失效,在Web方面可能造成Session訪問的問題,這不在本文討論方面內(nèi)
           動態(tài)靜態(tài)資源分離:最方便列舉就是Java的JSP和靜態(tài)資源如:.js/.css/.html/.png方面的資源分離,之前開發(fā)web方面的程序時候我們習(xí)慣將html、css等資源文件也放置于Tomcat之中,用戶訪問后tomcat需要將請求的這些靜態(tài)資源文件一并返回給用戶,再者如果有多臺同業(yè)務(wù)邏輯的tomcat服務(wù)器的話,同樣的資源還需要在每個服務(wù)器上放一份,同時也增加了tomcat服務(wù)器的網(wǎng)絡(luò)IO,十分不合算的,如果我們只講JSP之類的請求交給tomcat,而代理服務(wù)器上存放靜態(tài)資源,當(dāng)用戶的請求非動態(tài)資源的時候,我們完全可以將代理服務(wù)器的靜態(tài)資源直接返回給用戶,而不去增大Tomcat的壓力,tomcat只需要負(fù)責(zé)邏輯處理和動態(tài)資源的加載就可以了
           基于上述的Nginx優(yōu)勢,決定搭建一下Nginx+Tomcat的組合來進(jìn)行測試,包括參數(shù)傳遞,post、get傳遞參數(shù)是否有影響,還有Nginx的工作模式master和worker的工作方式進(jìn)行一些淺薄的總結(jié)
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          
          一、Nginx的安裝
           安裝部分這里就不在細(xì)說了,網(wǎng)上的教程很多,我們直接從配置文件開始吧
          1
          2
          
          二、配置文件
          #user nobody;
          #這里是核心worker數(shù),一般設(shè)置為與cpu核心數(shù)相同的數(shù)目,避免進(jìn)程切換造成的上下文切換耗費(fèi)資源,cpu信息可以從/proc/cpuinfo中查看
          worker_processes 1;
          #error_log logs/error.log;
          #error_log logs/error.log notice;
          #error_log logs/error.log info; 
          #pid logs/nginx.pid;
          events {
          #use epoll model使用epoll模型,采用異步非阻塞模型加快處理速度
           use epoll;
           worker_connections 1024;
          }
          http { 
           include mime.types;
           default_type application/octet-stream;
           #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
           # '$status $body_bytes_sent "$http_referer" '
           # '"$http_user_agent" "$http_x_forwarded_for"';
           #access_log logs/access.log main;
           #設(shè)定通過nginx上傳文件的大小
           client_max_body_size 300m;
          #使用sendfile函數(shù)在兩個文件描述符之間直接傳遞數(shù)據(jù)(完全在內(nèi)核中操作,傳送),從而避免了內(nèi)核緩沖區(qū)數(shù)據(jù)和用戶緩沖區(qū)數(shù)據(jù)之間的拷貝,操作效率很高,被稱之為零拷貝。
           sendfile on;
           #tcp_nopush on;
           #keepalive_timeout 0;
           #連接活躍時間
           keepalive_timeout 65;
          #使用壓縮數(shù)據(jù)減少IO量,但是在不支持?jǐn)?shù)據(jù)解壓瀏覽器可能產(chǎn)生亂碼
           #gzip on;
           #靜態(tài)服務(wù)器組
           #設(shè)定靜態(tài)資源服務(wù)器訪問接口
           upstream static.zh-jieli.com {
           server localhost:808 weight=1;
           }
           #動態(tài)服務(wù)器組
           upstream zh-jieli.com {
           #設(shè)置Hash輪詢規(guī)則
          #ip_hash;
          #weight: server ip:port weight=10
          #默認(rèn) 輪詢
          #fair:按照后端服務(wù)器的響應(yīng)時間來分配
          #url_hash:按照url規(guī)則進(jìn)行分配,使得固定的請求分配到固定的服務(wù)器上 
           server localhost:8080;
           server localhost:8081;
           }
           server{
           listen 808;
           server_name static;
           location / {
           }
           location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
           #所有靜態(tài)文件直接讀取硬盤內(nèi)容:讀取的靜態(tài)資源存放位置
           root /apache-tomcat-8.5.24/webapps/ROOT ;
           #資源是否進(jìn)行緩存與緩存時間
           expires 30d; #緩存30天
           }
           }
           server {
           listen 80;
           server_name localhost;
           #charset koi8-r;
           #access_log logs/host.access.log main;
           location / {
           root html;
           index index1.html index.htm;
           }
           location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
           #proxy_cache cache_one;
           proxy_cache_valid 200 304 302 5d;
           proxy_cache_valid any 5d;
           proxy_cache_key '$host:$server_port$request_uri';
           add_header X-Cache '$upstream_cache_status from $host';
           proxy_pass http://static.zh-jieli.com;
           # 所有靜態(tài)文件直接讀取硬盤
           root /apache-tomcat-8.5.24/webapps/ROOT;
           expires 30d; #緩存30天
           }
           #其他頁面反向代理到tomcat容器
           location ^~ /tomcat {
           index index; 
           # proxy_pass http://localhost:8080/;
           #設(shè)定代理服務(wù)器組
           proxy_pass http://zh-jieli.com/;
           }
           error_page 500 502 503 504 /50x.html;
           location=/50x.html {
           root html;
           }
           }
          }
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          39
          40
          41
          42
          43
          44
          45
          46
          47
          48
          49
          50
          51
          52
          53
          54
          55
          56
          57
          58
          59
          60
          61
          62
          63
          64
          65
          66
          67
          68
          69
          70
          71
          72
          73
          74
          75
          76
          77
          78
          79
          80
          81
          82
          83
          84
          85
          86
          87
          88
          89
          90
          91
          92
          93
          94
          95
          96
          97
          98
          99
          100
          101
          102
          103
          104
          105
          106
          107
          108
          109
           整個nginx工作時當(dāng)http請求到來時,由nginx針對nginx.conf配置好的規(guī)則,對location進(jìn)行正則匹配,匹配到相應(yīng)的正則,進(jìn)行l(wèi)ocation內(nèi)部的處理
           關(guān)于Nginx的location配置附上一篇博客,很nice
           http://seanlook.com/2015/05/17/nginx-location-rewrite/
           里面很詳細(xì)列出了各種要求的location匹配規(guī)則,值得注意的一點(diǎn)是:
           location匹配遵循最長原則,即滿足了之前的匹配規(guī)則后,除了遇見^會終止向下繼續(xù)匹配,其他情況會依次向下搜索,知道找到合適的location匹配規(guī)則然后進(jìn)行處理
           Nginx在模塊功能上分三個模塊:
           Handlers(處理器模塊)。此類模塊直接處理請求,并進(jìn)行輸出內(nèi)容和修改headers信息等操作。Handlers處理器模塊一般只能有一個。
           Filters (過濾器模塊)。此類模塊主要對其他處理器模塊輸出的內(nèi)容進(jìn)行修改操作,最后由Nginx輸出。
           Proxies (代理類模塊)。此類模塊是Nginx的HTTP Upstream之類的模塊,這些模塊主要與后端一些服務(wù)比如FastCGI等進(jìn)行交互,實(shí)現(xiàn)服務(wù)代理和負(fù)載均衡等功能。
          因?yàn)槭菧y試,所以我的兩個tomcat都安裝到了同一臺本地機(jī)器上
          生產(chǎn)環(huán)境中根據(jù)需要進(jìn)行配置相應(yīng)的IP就好了
          本地寫好相應(yīng)的測試代碼+log4j將信息日志打到相應(yīng)的位置用來觀察參數(shù)是否傳遞過來
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          

          TestOne.java

          package com.nginx.controllers;
          import com.nginx.utils.Log4jUtils;
          import org.springframework.stereotype.Controller;
          import org.springframework.web.bind.annotation.RequestMapping;
          import org.springframework.web.bind.annotation.RequestParam;
          @Controller
          @RequestMapping("/test")
          public class TestOne {
           @RequestMapping("/getname")
           public void test(@RequestParam(value="name") String name) {
           //用來記錄獲取的參數(shù)name,可以通過查看日志進(jìn)行確認(rèn)
           Log4jUtils.getLogger().info("my name is" + name);
           }
          }
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          

          Log4jUtils.java

          package com.nginx.utils;
          import org.apache.log4j.Logger;
          public class Log4jUtils {
           private static final Logger logger=Logger.getLogger(Logger.class);
           public static Logger getLogger() {
           return logger;
           }
          }
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
           這里簡單做了兩個的demo程序,做相應(yīng)的測試,將項目打成war包后上傳至Linux服務(wù)器,移動到tomcat/webapps中,tomcat進(jìn)行熱部署
           先測試當(dāng)前的tomcat是否能正常運(yùn)行,由于沒有做區(qū)別頁面,就直接看日志來判斷了
          1
          2
          3
          



           如圖:以輪詢方式進(jìn)行訪問8080和8081監(jiān)聽的tomcat
           上述方式是get請求進(jìn)行的測試,我們來試試post
          1
          2
          3
          4
          <!DOCTYPE html>
          <html>
          <body>
          <form action="http://123.207.85.242/tomcat/nginx/test/getname" method="post">
           <input type="text" name="name">
           <input type="submit" value="提交">
          </form>
          </body>
          </html>
          1
          2
          3
          4
          5
          6
          7
          8
          9
          測試結(jié)果依舊可以正常接收參數(shù),這里就不貼圖了
          1
          2
          
          二、靜態(tài)動態(tài)資源分離
          現(xiàn)在試試直接訪問
          1
          2
          http://ip/tomcat
          1
          我們會直接跳轉(zhuǎn)到tomcat的主頁面,如果檢索tomcat.png的話
          1
          2
          http://ip/tomcat/tomcat.png
          1
          可以直接檢索到tomcat.png,它是來自tomcat服務(wù)器的資源,如果需要檢索nginx的靜態(tài)資源,可以使用
          1
          2
          http://ip/tomcat.png
          1
           這樣我們的資源就來自于nginx.conf文件中配置的關(guān)于靜態(tài)資源的訪問路徑了,為了證明此事資源來自于nginx,我嘗試將8080端口的tomcat/webapps/ROOT/tomcat.png更名為tomcat1.png,然后嘗試訪問http://ip/tomcat1.png訪問成功,這時候如果刷新http://ip/tomcat/訪問tomcat主頁的時候會發(fā)現(xiàn)圖標(biāo)會在出現(xiàn)和不出現(xiàn)之間輪轉(zhuǎn),原因就是這里請求了tomcat服務(wù)器本身去拿資源,tomcat:8080的圖片名被更改,如果代理訪問的服務(wù)器正好是tomcat:8080的話,它是找不到tomcat.png的,當(dāng)然輪轉(zhuǎn)到tomcat:8081時候,圖片還是會出現(xiàn)滴
          1
          2
          
          三、Nginx工作模式



           如圖nginx啟動后會有兩個進(jìn)程
           如果你將nginx.conf的
          1
          2
          3
          worker_processes 1;更改為worker_processes 2; 
          1
          那么出現(xiàn)的就是
          1
          2
          



           那我們來說說master和worker進(jìn)程分別的是干什么的,從pid來看,matser的父進(jìn)程是init進(jìn)程,而worker的父進(jìn)程都是master,這里就很有意思了,那nginx這兩個進(jìn)程都到底是干嘛的嘞???
           感謝baidu與google的強(qiáng)大,對于疑問的解釋很清楚
           原地址:http://blog.csdn.net/hguisu/article/details/8930668
          感興趣的同學(xué)可以看一看,這里只簡單總結(jié)一下
          1
          2
          3
          4
          5
          6
          7
          

          master進(jìn)程

           主要用來管理worker進(jìn)程,包含:接收來自外界的信號,向各worker進(jìn)程發(fā)送信號,監(jiān)控worker進(jìn)程的運(yùn)行狀態(tài),當(dāng)worker進(jìn)程退出后(異常情況下),會自動重新啟動新的worker進(jìn)程。
           master的平滑重啟很有意思,master只負(fù)責(zé)接收外界信號,那么當(dāng)我們更改了nginx.conf文件需要重新啟動nginx時候怎么辦????只需要通過kill向master進(jìn)程發(fā)送信號就行了。比如kill -HUP pid,這時候master并不會干掉自己所有的worker然后自殺,而是重新加載nginx.conf后,重新啟動一批worker,在這之后的請求全部由新的worker進(jìn)行處理,而老的worker也并不是立即終止,而是在運(yùn)行完當(dāng)前的請求后,被終止掉,接下來的請求就全部交給新的worker了,當(dāng)然這個方式后來被改成了
          1
          2
          3
          nginx -s reload
          1
          這個命令重新加載配置和上面的略有不一樣,其會新啟動一個nginx然后向Master發(fā)送信號,當(dāng)然接下來就和上面的過程一致了
          1
          2
          

          worker進(jìn)程

          ntroduction

          部署是指將Web應(yīng)用程序(第三方WAR或您自己的自定義Web應(yīng)用程序)安裝到Tomcat服務(wù)器的過程。

          Web應(yīng)用程序部署可以在Tomcat服務(wù)器中以多種方式完成。

          • 靜態(tài);在Tomcat啟動之前設(shè)置Web應(yīng)用程序
          • 動態(tài);通過直接操作已部署的Web應(yīng)用程序(依賴于auto-deployment功能)或使用Tomcat Manager Web應(yīng)用程序遠(yuǎn)程訪問

          Tomcat Manager是一個Web應(yīng)用程序,可以通過HTML GUI交互使用,或以編程方式(通過基于URL的API)來部署和管理Web應(yīng)用程序。

          有許多方法可以執(zhí)行依賴Manager Web應(yīng)用程序的部署。 Apache Tomcat為Apache Ant構(gòu)建工具提供任務(wù)。Apache Tomcat Maven Plugin project提供與Apache Maven的集成。還有一個名為Client Deployer的工具,可以從命令行使用它,并提供其他功能,例如編譯和驗(yàn)證Web應(yīng)用程序以及將Web應(yīng)用程序打包到Web應(yīng)用程序資源(WAR)文件中。

          Installation

          靜態(tài)部署Web應(yīng)用程序不需要安裝,因?yàn)門omcat提供了開箱即用的功能。使用Tomcat Manager的部署功能也不需要任何安裝,盡管需要進(jìn)行一些配置,詳細(xì)說明在下一節(jié)。但是,如果您希望使用Tomcat客戶端部署程序(TCD),則需要安裝。

          TCD未與Tomcat核心發(fā)行版一起打包,因此必須從“下載”區(qū)域單獨(dú)下載。下載通常是標(biāo)記的apache-tomcat-9.0.x-deployer.


          TCD需要先安裝Apache Ant 1.6.2+和Java。您需要設(shè)置指向Ant安裝根目錄的ANT_HOME環(huán)境值,以及指向Java安裝根目錄的JAVA_HOME值。此外,您應(yīng)該確保Ant的ant命令,以及Java javac編譯器命令可以在shell中運(yùn)行。

          1. 下載TCD發(fā)行版
          2. 不需要將TCD包提取到任何現(xiàn)有的Tomcat安裝中,它可以被提取到任何位置。
          3. Read Using the Tomcat Client Deployer

          A word on Contexts

          在談?wù)揥eb應(yīng)用程序的部署時,Context這個概念需要被理解。 Context在Tomcat中被稱為Web應(yīng)用程序。

          為了在Tomcat中配置一個Context ,一個Context Descriptor(Context描述)是必須的。Context Descriptor只是一個XML文件,它包含上下文的Tomcat相關(guān)配置,例如命名資源或會話管理器配置。在早期版本的Tomcat中,Context Descriptor配置的內(nèi)容通常存儲在Tomcat的主配置文件中server.xml。但現(xiàn)在不鼓勵這種做法(盡管目前仍然有效)。


          Context Descriptor不僅幫助Tomcat知道如何配置上下文,而且其他工具(如Tomcat Manager和TCD)通常使用這些上下文描述符來正確執(zhí)行其角色。

          Context Descriptor的位置是:

          1. $CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml
          2. $CATALINA_BASE/webapps/[webappname]/META-INF/context.xml

          (1)中的文件名為[webappname] .xml,但(2)中的文件名為context.xml。如果沒有為Context提供Context Descriptor,Tomcat將使用默認(rèn)值配置Context。

          在Tomcat啟動時部署

          如果您對使用Tomcat Manager或TCD不感興趣,那么您需要將Web應(yīng)用程序靜態(tài)部署到Tomcat,然后啟動Tomcat,此類部署的位置稱為appBase,它對于每個主機(jī)是指定的。你要么復(fù)制一個所謂的exploded web application到此位置,或壓縮的Web應(yīng)用程序資源.WAR文件。

          還有當(dāng)Host的deployOnStartup屬性為“true”時,在Tomcat啟動時應(yīng)用才會部署到appBase指定的位置。

          在這種情況下,Tomcat啟動時將發(fā)生以下部署順序:

          1. 將首先部署任何上下文描述符。
          2. 然后將部署未被任何上下文描述符引用的exploded web application。如果他們在appBase中有一個關(guān)聯(lián)的.WAR文件,并且它比exploded web application更新,則會刪除exploded web application,并從.WAR重新部署webapp。
          3. 將部署.WAR文件

          在正在運(yùn)行的Tomcat服務(wù)器上部署

          可以將Web應(yīng)用程序部署到正在運(yùn)行的Tomcat服務(wù)器。

          如果 Host的 autoDeploy屬性為“true”,主機(jī)將嘗試根據(jù)需要動態(tài)部署和更新Web應(yīng)用程序,例如,如果將新的.WAR放入appBase。為此,主機(jī)需要啟用后臺處理,這是默認(rèn)配置。

          autoDeploy設(shè)置為“true”,運(yùn)行Tomcat允許:

          • 部署.WAR文件復(fù)制到主機(jī)中appBase.
          • 部署已復(fù)制到主機(jī)中的exploded web application.
          • 重新部署已在提供新.WAR時從.WAR部署的Web應(yīng)用程序。在這種情況下,將刪除exploded web application,并再次展開.WAR。請注意,如果配置主機(jī)以便.WAR不會使用展開,unpackWARs屬性設(shè)置為“false”,在這種情況下,Web應(yīng)用程序?qū)⒑唵蔚刂匦虏渴馂閴嚎s存檔。
          • 如果更新了/WEB-INF/web.xml文件(或定義為WatchedResource的任何其他資源),則重新加載Web應(yīng)用程序。
          • 如果更新了部署Web應(yīng)用程序的Context Descriptor文件,則重新部署Web應(yīng)用程序。
          • 如果更新Web應(yīng)用程序使用的全局或每主機(jī)上下文描述符文件,則重新部署從屬Web應(yīng)用程序。
          • 如果將上下文描述符文件(具有與先前部署的Web應(yīng)用程序的上下文路徑對應(yīng)的文件名)添加到Web應(yīng)用程序,則重新部署Web應(yīng)用程序$CATALINA_BASE/conf/[enginename]/[hostname]/ directory.
          • 如果刪除了其文檔庫(docBase),則取消部署Web應(yīng)用程序。請注意,在Windows上,這假定啟用了反鎖定功能(請參閱上下文配置),否則無法刪除正在運(yùn)行的Web應(yīng)用程序的資源。

          請注意,也可以在加載程序中配置Web應(yīng)用程序重新加載,在這種情況下,將跟蹤已加載的類以進(jìn)行更改。

          使用客戶端部署程序包進(jìn)行部署

          最后,可以使用Tomcat Client Deployer實(shí)現(xiàn)Web應(yīng)用程序的部署。這是一個包,可用于驗(yàn)證,編譯,壓縮到.WAR,以及將Web應(yīng)用程序部署到生產(chǎn)或開發(fā)Tomcat服務(wù)器。應(yīng)該注意,此功能使用Tomcat Manager,因此目標(biāo)Tomcat服務(wù)器應(yīng)該運(yùn)行。

          假設(shè)用戶熟悉Apache Ant以使用TCD。 Apache Ant是一個腳本化的構(gòu)建工具。 TCD預(yù)先打包了要使用的構(gòu)建腳本。只需要對Apache Ant有一定的了解(本頁前面列出的安裝,熟悉使用操作系統(tǒng)命令shell和配置環(huán)境變量)。

          TCD包括Ant任務(wù),部署前用于JSP編譯的Jasper頁面編譯器,以及驗(yàn)證Web應(yīng)用程序上下文描述符的任務(wù)。驗(yàn)證器任務(wù)(類org.apache.catalina.ant.ValidatorTask)僅允許一個參數(shù):解壓的Web應(yīng)用程序的基本路徑。

          TCD使用解壓的Web應(yīng)用程序作為輸入(請參閱下面使用的屬性列表)。以部署程序編程部署的Web應(yīng)用程序可以包括上下文描述符/META-INF/context.xml.

          TCD包含一個即用型Ant腳本,具有以下目標(biāo):

          • compile(默認(rèn)):編譯并驗(yàn)證Web應(yīng)用程序。這可以單獨(dú)使用,也不需要運(yùn)行Tomcat服務(wù)器。已編譯的應(yīng)用程序僅在關(guān)聯(lián)的應(yīng)用程序上運(yùn)行Tomcat X.Y.Z服務(wù)器版本,并不保證在另一個Tomcat版本上工作,因?yàn)镴asper生成的代碼取決于其運(yùn)行時組件。還應(yīng)該注意的是,該目標(biāo)還將自動編譯位于其中的任何Java源文件/WEB-INF/classesWeb應(yīng)用程序的文件夾。
          • deploy:將Web應(yīng)用程序(已編譯或未編譯)部署到Tomcat服務(wù)器。
          • undeploy:取消部署Web應(yīng)用程序
          • start:啟動Web應(yīng)用程序
          • reload:重新加載Web應(yīng)用程序
          • stop:停止Web應(yīng)用程序

          為了配置部署,請創(chuàng)建一個名為的文件deployer.properties在TCD安裝目錄root中。在此文件中,每行添加以下name=value對:

          此外,您需要確保已為目標(biāo)Tomcat Manager(TCD使用)設(shè)置了用戶,否則TCD將不會使用Tomcat Manager進(jìn)行身份驗(yàn)證,部署將失敗。要執(zhí)行此操作,請參閱Tomcat Manager頁面。

          • build:默認(rèn)情況下,使用的構(gòu)建文件夾將是${build}/webapp/${path} (${build},默認(rèn)情況下,指向${basedir}/build)。執(zhí)行結(jié)束后compile目標(biāo),Web應(yīng)用程序.WAR將位于${build}/webapp/${path}.war.
          • webapp:包含將被編譯和驗(yàn)證的解壓的Web應(yīng)用程序的目錄。默認(rèn)情況下,該文件夾是myapp.
          • path:默認(rèn)情況下,部署Web應(yīng)用程序的上下文路徑/myapp.
          • url:正在運(yùn)行的Tomcat服務(wù)器的Tomcat Manager Web應(yīng)用程序的絕對URL,將用于部署和取消部署Web應(yīng)用程序。默認(rèn)情況下,部署者將嘗試訪問在localhost上運(yùn)行的Tomcat實(shí)例http://localhost:8080/manager/text.
          • username:Tomcat Manager用戶名(用戶應(yīng)該具有manager-script的角色)
          • password:Tomcat Manager密碼。

          .1 Tomcat簡介

          Tomcat是Apache軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun和其他一些公司及個人共同開發(fā)而成。

          Tomcat服務(wù)器是一個免費(fèi)的開放源代碼的Web應(yīng)用服務(wù)器,屬于輕量級應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調(diào)試JSP程序的首選。

          Tomcat和Nginx、Apache(httpd)、lighttpd等Web服務(wù)器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨(dú)立的Servlet容器是Tomcat的默認(rèn)模式。不過,Tomcat處理靜態(tài)HTML的能力不如Nginx/Apache服務(wù)器。

          1.1.1 Tomcat好幫手---JDK

          JDK是 Java 語言的軟件開發(fā)工具包,主要用于移動設(shè)備、嵌入式設(shè)備上的java應(yīng)用程序。JDK是整個java開發(fā)的核心,它包含了JAVA的運(yùn)行環(huán)境(JVM+Java系統(tǒng)類庫)和JAVA工具。

          JDK包含了一批用于Java開發(fā)的組件,其中包括:

          javac:編譯器,將后綴名為.java的源代碼編譯成后綴名為“.class”的字節(jié)碼

          java:運(yùn)行工具,運(yùn)行.class的字節(jié)碼

          jar:打包工具,將相關(guān)的類文件打包成一個文件

          javadoc:文檔生成器,從源碼注釋中提取文檔,注釋需匹配規(guī)范

          jdb debugger:調(diào)試工具

          jps:顯示當(dāng)前java程序運(yùn)行的進(jìn)程狀態(tài)

          javap:反編譯程序

          appletviewer:運(yùn)行和調(diào)試applet程序的工具,不需要使用瀏覽器

          javah:從Java類生成C頭文件和C源文件。這些文件提供了連接膠合,使Java和C代碼可進(jìn)行交互。

          javaws:運(yùn)行JNLP程序

          extcheck:一個檢測jar包沖突的工具

          apt:注釋處理工具

          jhat:java堆分析工具

          jstack:棧跟蹤程序

          jstat:JVM檢測統(tǒng)計工具

          jstatd:jstat守護(hù)進(jìn)程

          jinfo:獲取正在運(yùn)行或崩潰的java程序配置信息

          jmap:獲取java進(jìn)程內(nèi)存映射信息

          idlj:IDL-to-Java編譯器。將IDL語言轉(zhuǎn)化為java文件

          policytool:一個GUI的策略文件創(chuàng)建和管理工具

          jrunscript:命令行腳本運(yùn)行

          JDK中還包括完整的JRE(Java Runtime Environment),Java運(yùn)行環(huán)境,也被稱為private runtime。包括了用于產(chǎn)品環(huán)境的各種庫類,如基礎(chǔ)類庫rt.jar,以及給開發(fā)人員使用的補(bǔ)充庫,如國際化與本地化的類庫、IDL庫等等。

          JDK中還包括各種樣例程序,用以展示Java API中的各部分。

          1.2 安裝Tomcat & JDK

          安裝時候選擇tomcat軟件版本要與程序開發(fā)使用的版本一致。jdk版本要進(jìn)行與tomcat保持一致。

          1.2.1 系統(tǒng)環(huán)境說明

          [root@web03 ~]# cat /etc/redhat-release

          CentOS Linux release 7.4.1708 (Core)

          [root@web03 ~]# uname -a

          Linux web03 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

          [root@web03 ~]# getenforce

          Disabled

          [root@web03 ~]# systemctl status firewalld.service

          ● firewalld.service - firewalld - dynamic firewall daemon

          Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

          Active: inactive (dead)

          Docs: man:firewalld(1)

          1.2.2 安裝JDK

          命令集:

          tar xf jdk-8u60-linux-x64.tar.gz -C /application/

          ln -s /application/jdk1.8.0_60 /application/jdk

          # 設(shè)置環(huán)境變量

          sed -i.ori '$a export JAVA_HOME=/application/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile

          source /etc/profile

          測試jdk是否安裝成功↓

          [root@web03 ~]# java -version

          java version "1.8.0_60"

          Java(TM) SE Runtime Environment (build 1.8.0_60-b27)

          Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

          1.2.3 安裝Tomcat

          命令集:

          tar xf apache-tomcat-8.0.27.tar.gz -C /application/

          ln -s /application/apache-tomcat-8.0.27 /application/tomcat

          # 設(shè)置環(huán)境變量

          echo 'export TOMCAT_HOME=/application/tomcat'>>/etc/profile

          source /etc/profile

          # 注意授權(quán),統(tǒng)一權(quán)限

          chown -R root.root /application/jdk/ /application/tomcat/

          檢查tomcat是否安裝成功

          [root@web03 ~]# /application/tomcat/bin/version.sh

          Using CATALINA_BASE: /application/tomcat

          Using CATALINA_HOME: /application/tomcat

          Using CATALINA_TMPDIR: /application/tomcat/temp

          Using JRE_HOME: /application/jdk

          Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

          Server version: Apache Tomcat/8.0.27

          Server built: Sep 28 2015 08:17:25 UTC

          Server number: 8.0.27.0

          OS Name: Linux

          OS Version: 3.10.0-693.el7.x86_64

          Architecture: amd64

          JVM Version: 1.8.0_60-b27

          JVM Vendor: Oracle Corporation

          1.3 Tomcat目錄介紹

          1.3.1 tomcat主目錄介紹

          [root@web03 ~]# cd /application/tomcat/

          [root@web03 tomcat]# tree -L 1

          .

          ├── bin #存放tomcat管理腳本

          ├── conf # tomcat 配置文件存放目錄

          ├── lib # web應(yīng)用調(diào)用的jar包存放路徑

          ├── LICENSE

          ├── logs # tomcat 日志存放目錄,catalina.out 為主要輸出日志

          ├── NOTICE

          ├── RELEASE-NOTES

          ├── RUNNING.txt

          ├── temp # 存放臨時文件

          ├── webapps # web程序存放目錄

          └── work # 存放編譯產(chǎn)生的.java 與 .class文件

          7 directories, 4 files

          1.3.2 webapps目錄介紹

          [root@web03 tomcat]# cd webapps/

          [root@web03 webapps]# tree -L 1

          .

          ├── docs # tomcat 幫助文檔

          ├── examples # web應(yīng)用實(shí)例

          ├── host-manager # 主機(jī)管理

          ├── manager # 管理

          └── ROOT # 默認(rèn)站點(diǎn)根目錄

          5 directories, 0 files

          1.3.3 Tomcat配置文件目錄介紹(conf)

          [root@web03 conf]# tree -L 1

          .

          ├── Catalina

          ├── catalina.policy

          ├── catalina.properties

          ├── context.xml

          ├── logging.properties

          ├── logs

          ├── server.xml # tomcat 主配置文件

          ├── server.xml.bak

          ├── server.xml.bak2

          ├── tomcat-users.xml # tomcat 管理用戶配置文件

          ├── tomcat-users.xsd

          └── web.xml

          2 directories, 10 files

          1.4 Tomcat的管理

          # 啟動程序/application/tomcat/bin/startup.sh

          # 關(guān)閉程序/application/tomcat/bin/shutdown.sh

          啟動停止

          [root@web03 ~]# /application/tomcat/bin/shutdown.sh

          Using CATALINA_BASE: /application/tomcat

          Using CATALINA_HOME: /application/tomcat

          Using CATALINA_TMPDIR: /application/tomcat/temp

          Using JRE_HOME: /application/jdk

          Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

          [root@web03 ~]# /application/tomcat/bin/startup.sh

          Using CATALINA_BASE: /application/tomcat

          Using CATALINA_HOME: /application/tomcat

          Using CATALINA_TMPDIR: /application/tomcat/temp

          Using JRE_HOME: /application/jdk

          Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

          Tomcat started.

          注意:tomcat未啟動的情況下使用shutdown腳本,會有大量的輸出信息。

          檢查tomcat是否啟動正常

          [root@web03 ~]# netstat -lntup |grep java

          tcp6 0 0 :::8080 :::* LISTEN 30560/java

          tcp6 0 0 127.0.0.1:8005 :::* LISTEN 30560/java

          tcp6 0 0 :::8009 :::* LISTEN 30560/java

          說明:所有與java相關(guān)的,服務(wù)啟動都是java命名的進(jìn)程

          1.4.1 啟動完成瀏覽器進(jìn)行訪問

          http://10.0.0.17:8080/

          1.5 Tomcat日志說明

          1.5.1 查看日志

          [root@web03 ~]# tailf /application/tomcat/logs/catalina.out

          24-Nov-2017 15:09:51.654 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]

          24-Nov-2017 15:09:51.665 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]

          24-Nov-2017 15:09:51.670 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 60037 ms

          發(fā)現(xiàn)啟動時間較長,其中有一項的啟動時間占據(jù)了絕大多數(shù)

          24-Nov-2017 15:09:50.629 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive /application/apache-tomcat-8.0.27/webapps/memtest.war has finished in 58,892 ms

          發(fā)現(xiàn)耗時在這里:是session引起的隨機(jī)數(shù)問題導(dǎo)致的。Tocmat的Session ID是通過SHA1算法計算得到的,計算Session ID的時候必須有一個密鑰。為了提高安全性Tomcat在啟動的時候會通過隨機(jī)生成一個密鑰。

          1.5.2 解決Tomcat啟動慢的方法

          Tomcat啟動慢主要原因是生成隨機(jī)數(shù)的時候卡住了,導(dǎo)致tomcat啟動不了。

          是否有足夠的熵來用于產(chǎn)生隨機(jī)數(shù),可以通過如下命令來查看

          [root@web03 ~]# cat /proc/sys/kernel/random/entropy_avail

          6

          為了加速/dev/random提供隨機(jī)數(shù)的速度,你可以通過操作設(shè)備的外設(shè),讓其產(chǎn)生大量的中斷,網(wǎng)絡(luò)傳輸數(shù)據(jù),按鍵,移動鼠標(biāo),在命令行敲幾個不同的命令,俗稱聚氣。

          cat /dev/random 會消耗能量

          方法1:

          vim $JAVA_HOME/jre/lib/security/java.security

          securerandom.source=file:/dev/random

          改為

          securerandom.source=file:/dev/urandom

          方法2:

          vim $TOMCAT_HOME/bin/catalina.sh

          if [[ "$JAVA_OPTS" !=*-Djava.security.egd=* ]]; then

          JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/urandom"

          fi

          這個系統(tǒng)屬性egd表示熵收集守護(hù)進(jìn)程(entropy gathering daemon)

          方法3:(推薦)

          yum install rng-tools # 安裝rngd服務(wù)(熵服務(wù),增大熵池)

          systemctl start rngd # 啟動服務(wù)

          1.6 Tomcat管理功能使用

          注意:測試功能,生產(chǎn)環(huán)境不要用

          Tomcat管理功能用于對Tomcat自身以及部署在Tomcat上的應(yīng)用進(jìn)行管理的web應(yīng)用。在默認(rèn)情況下是處于禁用狀態(tài)的。如果需要開啟這個功能,就需要配置管理用戶,即配置tomcat-users.xml 文件。

          [root@web03 ~]# vim /application/tomcat/conf/tomcat-users.xml

          ……

          39 <role rolename="manager-gui"/>

          40 <role rolename="admin-gui"/>

          41 <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>

          42 </tomcat-users> # 在此行前加入上面三行

          未修改文件前進(jìn)行訪問

          <role rolename="manager-gui"/>

          <user username="tomcat" password="s3cret" roles="manager-gui"/>

          <role rolename="admin-gui"/>

          <user username="tomcat" password="s3cret" roles="admin-gui"/>

          從而得出上面的配置文件信息。

          1.6.1 在web界面訪問管理界面

          輸入之前配置的賬戶與密碼即可

          1.7 Tomcat主配置文件詳解

          1.7.1 server.xml組件類別

          頂級組件:位于整個配置的頂層,如server。

          容器類組件:可以包含其它組件的組件,如service、engine、host、context。

          連接器組件:連接用戶請求至tomcat,如connector。

          被嵌套類組件:位于一個容器當(dāng)中,不能包含其他組件,如Valve、logger。

          <server>

          <service>

          <connector />

          <engine>

          <host>

          <context></context>

          </host>

          <host>

          <context></context>

          </host>

          </engine>

          </service>

          </server>

          1.7.2 組件介紹

          1.7.3 server.xml配置文件注釋

          <?xml version='1.0' encoding='utf-8'?>

          <!--

          <Server>元素代表整個容器,是Tomcat實(shí)例的頂層元素.由org.apache.catalina.Server接口來定義.它包含一個<Service>元素.并且它不能做為任何元素的子元素.

          port指定Tomcat監(jiān)聽shutdown命令端口.終止服務(wù)器運(yùn)行時,必須在Tomcat服務(wù)器所在的機(jī)器上發(fā)出shutdown命令.該屬性是必須的.

          shutdown指定終止Tomcat服務(wù)器運(yùn)行時,發(fā)給Tomcat服務(wù)器的shutdown監(jiān)聽端口的字符串.該屬性必須設(shè)置

          -->

          <Server port="8005" shutdown="SHUTDOWN">

          <Listener className="org.apache.catalina.startup.VersionLoggerListener" />

          <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

          <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

          <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

          <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

          <GlobalNamingResources>

          <Resource name="UserDatabase" auth="Container"

          type="org.apache.catalina.UserDatabase"

          description="User database that can be updated and saved"

          factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

          pathname="conf/tomcat-users.xml" />

          </GlobalNamingResources>

          <!--service服務(wù)組件-->

          <Service name="Catalina">

          <!-- Connector主要參數(shù)說明(見下表) -->

          <Connector port="8080" protocol="HTTP/1.1"

          connectionTimeout="20000"

          redirectPort="8443" />

          <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

          <!--engine,核心容器組件,catalina引擎,負(fù)責(zé)通過connector接收用戶請求,并處理請求,將請求轉(zhuǎn)至對應(yīng)的虛擬主機(jī)host

          defaultHost指定缺省的處理請求的主機(jī)名,它至少與其中的一個host元素的name屬性值是一樣的

          -->

          <Engine name="Catalina" defaultHost="localhost">

          <!--Realm表示存放用戶名,密碼及role的數(shù)據(jù)庫-->

          <Realm className="org.apache.catalina.realm.LockOutRealm">

          <Realm className="org.apache.catalina.realm.UserDatabaseRealm"

          resourceName="UserDatabase"/>

          </Realm>

          <!-- 詳情常見下表(host參數(shù)詳解)-->

          <Host name="localhost" appBase="webapps"

          unpackWARs="true" autoDeploy="true">

          <!-- 詳情常見下表(Context參數(shù)說明 )-->

          <Context path="" docBase="" debug=""/>

          <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

          prefix="localhost_access_log" suffix=".txt"

          pattern="%h %l %u %t "%r" %s %b" />

          </Host>

          </Engine>

          </Service>

          </Server>

          1.7.4 Connector主要參數(shù)說明

          1.7.5 host參數(shù)詳解

          1.7.6 Context參數(shù)說明

          1.8 WEB站點(diǎn)部署

          上線的代碼有兩種方式:

          第一種方式是直接將程序目錄放在webapps目錄下面,這種方式大家已經(jīng)明白了,就不多說了。

          第二種方式是使用開發(fā)工具將程序打包成war包,然后上傳到webapps目錄下面。

          1.8.1 使用war包部署web站點(diǎn)

          [root@web03 webapps]# pwd

          /application/tomcat/webapps

          [root@web03 webapps]# wget http://10.0.0.1/apache/tomcat/memtest.war

          站點(diǎn)主動解壓部署

          [root@web03 webapps]# ls

          docs examples host-manager logs manager memtest memtest.war ROOT

          瀏覽器訪問:

          http://10.0.0.17:8080//memtest/meminfo.jsp

          1.8.2 自定義默認(rèn)網(wǎng)站目錄

          上面訪問的網(wǎng)址為 http://10.0.0.3:8080/memtest/meminfo.jsp

          現(xiàn)在想訪問格式為http://10.0.0.3:8080/meminfo.jsp

          方法一

          將meminfo.jsp或其他程序放在tomcat/webapps/ROOT目錄下即可。因?yàn)槟J(rèn)網(wǎng)站根目錄為tomcat/webapps/ROOT

          方法二

          [root@web03 ~]# vim /application/tomcat/conf/server.xml +125

          …… #添加上這兩行

          <Context path="" docBase="/application/tomcat/webapps/memtest" debug="0" reloadable="false" crossContext="true"/>

          <Context path="/40team" docBase="/application/tomcat/webapps/memtest" debug="0" reloadable="false" crossContext="true"/>

          ……

          修改配置文件后,要重啟服務(wù)

          [root@web03 ~]# /application/tomcat/bin/shutdown.sh

          [root@web03 ~]# /application/tomcat/bin/startup.sh

          1.8.3 部署開源站點(diǎn)(jpress)

          jpress官網(wǎng):http://jpress.io

          下載地址:https://github.com/JpressProjects/jpress

          第一個里程碑:安裝配置數(shù)據(jù)庫

          yum -y install mariadb-server

          systemctl start mariadb.service

          #配置數(shù)據(jù)庫

          mysql

          create database jpress DEFAULT CHARACTER SET utf8;

          grant all on jpress.* to jpress@'localhost' identified by '123456';

          exit

          第二個里程碑:jpress站點(diǎn)上線

          [root@web03 webapps]# pwd

          /application/tomcat/webapps

          [root@web03 webapps]# wget http://10.0.0.1/apache/tomcat/jpress-web-newest.war

          第三個里程碑:瀏覽器訪問

          瀏覽器訪問: http://10.0.0.17:8080/jpress-web-newest/install

          填寫數(shù)據(jù)庫信息

          設(shè)置站點(diǎn)名稱等

          安裝完成

          重啟tomcat服務(wù)

          [root@web03 ~]# /application/tomcat/bin/shutdown.sh

          [root@web03 ~]# /application/tomcat/bin/startup.sh

          1.9 Tomcat多實(shí)例配置

          多虛擬主機(jī):nginx 多個Server標(biāo)簽(域名,ip,端口) 進(jìn)程數(shù)量固定 master+worker

          多實(shí)例(多進(jìn)程):同一個程序啟動多次,分為兩種情況:

          第一種:一臺機(jī)器跑多個站點(diǎn);

          第二種:一個機(jī)器跑一個站點(diǎn)多個實(shí)例,配合負(fù)載均衡

          1.9.1 復(fù)制程序文件

          cd /application/tools/

          tar xf apache-tomcat-8.0.27.tar.gz

          cp -a apache-tomcat-8.0.27 tomcat8_1

          cp -a apache-tomcat-8.0.27 tomcat8_2

          修改端口,以啟動多實(shí)例。多實(shí)例之間端口不能一致

          sed -i 's#8005#8011#;s#8080#8081#' tomcat8_1/conf/server.xml

          sed -i 's#8005#8012#;s#8080#8082#' tomcat8_2/conf/server.xml

          [root@web03 application]# diff tomcat8_1/conf/server.xml tomcat8_2/conf/server.xml

          22c22

          < <Server port="8011" shutdown="SHUTDOWN">

          ---

          > <Server port="8012" shutdown="SHUTDOWN">

          67c67

          < Define a non-SSL/TLS HTTP/1.1 Connector on port 8081

          ---

          > Define a non-SSL/TLS HTTP/1.1 Connector on port 8082

          69c69

          < <Connector port="8081" protocol="HTTP/1.1"

          ---

          > <Connector port="8082" protocol="HTTP/1.1"

          75c75

          < port="8081" protocol="HTTP/1.1"

          ---

          > port="8082" protocol="HTTP/1.1"

          將配置好的tomcat程序打包,以備之后使用

          tar zcf muti_tomcat8.tar.gz ./tomcat8_1 ./tomcat8_2

          啟動tomcat多實(shí)例

          /application/tomcat8_1/bin/startup.sh

          /application/tomcat8_2/bin/startup.sh

          檢查端口是否啟動

          [root@web03 tomcat8_1]# netstat -lntup |grep java

          tcp6 0 0 127.0.0.1:8011 :::* LISTEN 31906/java

          tcp6 0 0 127.0.0.1:8012 :::* LISTEN 31932/java

          tcp6 0 0 :::8080 :::* LISTEN 31812/java

          tcp6 0 0 :::8081 :::* LISTEN 31906/java

          tcp6 0 0 :::8082 :::* LISTEN 31932/java

          tcp6 0 0 127.0.0.1:8005 :::* LISTEN 31812/java

          tcp6 0 0 :::8009 :::* LISTEN 31812/java

          將每個實(shí)例的網(wǎng)頁進(jìn)行區(qū)分

          echo 8081 >>/application/tomcat8_1/webapps/ROOT/index.jsp

          echo 8082 >>/application/tomcat8_2/webapps/ROOT/index.jsp

          1.9.2 在瀏覽器訪問,進(jìn)行測試

          檢查多實(shí)例的啟動

          http://10.0.0.17:8082

          http://10.0.0.17:8081

          1.10 tomcat反向代理集群

          1.10.1 負(fù)載均衡器說明

          [root@lb01 ~]# cat /etc/redhat-release

          CentOS release 6.9 (Final)

          [root@lb01 ~]# uname -a

          Linux lb01 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

          [root@lb01 ~]# getenforce

          Disabled

          [root@lb01 ~]# /etc/init.d/iptables status

          iptables: Firewall is not running.

          負(fù)載均衡軟件使用nginx,詳情參照

          http://www.cnblogs.com/clsn/p/7750615.html

          1.10.2 配置負(fù)載均衡器

          備份原配置文件

          mv /application/nginx/conf/nginx.conf{,.20171127}

          egrep -v '#|^$' /application/nginx/conf/nginx.conf.default > /application/nginx/conf/nginx.conf

          配置文件內(nèi)容

          [root@lb01 ~]# cat /application/nginx/conf/nginx.conf

          worker_processes 1;

          events {

          worker_connections 1024;

          }

          http {

          include mime.types;

          default_type application/octet-stream;

          sendfile on;

          keepalive_timeout 65;

          upstream web_pools {

          server 10.0.0.17:8081;

          server 10.0.0.17:8082;

          }

          server {

          listen 80;

          server_name localhost;

          location / {

          root html;

          index index.jsp index.htm;

          proxy_pass http://web_pools;

          }

          error_page 500 502 503 504 /50x.html;

          location=/50x.html {

          root html;

          }

          }

          }

          配置完成后重啟nginx服務(wù)

          /application/nginx/sbin/nginx -s stop

          /application/nginx/sbin/nginx

          1.10.3 使用命令進(jìn)行訪問測試

          使用curl 命令進(jìn)行測試,tail進(jìn)行關(guān)鍵字提取

          [root@lb01 ~]# curl -s 10.0.0.5|tail -1

          8081

          [root@lb01 ~]# curl -s 10.0.0.5|tail -1

          8082

          使用curl 命令進(jìn)行測試,awk進(jìn)行關(guān)鍵字提取

          [root@lb01 ~]# curl -s 10.0.0.5|awk 'END{print}'

          8082

          [root@lb01 ~]# curl -s 10.0.0.5|awk 'END{print}'

          8081

          使用curl 命令進(jìn)行測試,sed進(jìn)行關(guān)鍵字提取

          [root@lb01 ~]# curl -s 10.0.0.5|sed -n '$p'

          8082

          [root@lb01 ~]# curl -s 10.0.0.5|sed -n '$p'

          8081

          1.10.4 在瀏覽器上進(jìn)行訪問測試

          建議使用google瀏覽器chrome 的隱身模式進(jìn)行訪問,使用ctrl+f5 進(jìn)行強(qiáng)制刷新

          1.11 監(jiān)控tomcat集群狀態(tài)

          1.11.1 方法一:開發(fā)java監(jiān)控頁面

          [root@web03 tomcat8_1]# cat /application/tomcat/webapps/memtest/meminfo.jsp

          <%

          Runtime rtm=Runtime.getRuntime();

          long mm=rtm.maxMemory()/1024/1024;

          long tm=rtm.totalMemory()/1024/1024;

          long fm=rtm.freeMemory()/1024/1024;

          out.println("JVM memory detail info :<br>");

          out.println("Max memory:"+mm+"MB"+"<br>");

          out.println("Total memory:"+tm+"MB"+"<br>");

          out.println("Free memory:"+fm+"MB"+"<br>");

          out.println("Available memory can be used is :"+(mm+fm-tm)+"MB"+"<br>");

          %>

          1.11.2 方法二:使用jps命令進(jìn)行監(jiān)控

          [root@web03 ~]# jps -lvm

          31906 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/application/tomcat8_1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat8_1/endorsed -Dcatalina.base=/application/tomcat8_1 -Dcatalina.home=/application/tomcat8_1 -Djava.io.tmpdir=/application/tomcat8_1/temp

          31812 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat/endorsed -Dcatalina.base=/application/tomcat -Dcatalina.home=/application/tomcat -Djava.io.tmpdir=/application/tomcat/temp

          31932 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/application/tomcat8_2/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat8_2/endorsed -Dcatalina.base=/application/tomcat8_2 -Dcatalina.home=/application/tomcat8_2 -Djava.io.tmpdir=/application/tomcat8_2/temp

          32079 sun.tools.jps.Jps -lvm -Denv.class.path=.:/application/jdk/lib:/application/jdk/jre/lib:/application/jdk/lib/tools.jar -Dapplication.home=/application/jdk1.8.0_60 -Xms8m

          1.11.3 Tomcat遠(yuǎn)程監(jiān)控功能

          修改配置文件,開啟遠(yuǎn)程監(jiān)控

          vim /application/tomcat8_1/bin/catalina.sh +97

          CATALINA_OPTS="$CATALINA_OPTS

          -Dcom.sun.management.jmxremote

          -Dcom.sun.management.jmxremote.port=12345

          -Dcom.sun.management.jmxremote.authenticate=false

          -Dcom.sun.management.jmxremote.ssl=false

          -Djava.rmi.server.hostname=10.0.0.17"

          重啟服務(wù),檢查12345端口是否開啟

          /application/tomcat8_1/bin/shutdown.sh

          /application/tomcat8_1/bin/startup.sh

          netstat -tunlp|grep 12345

          檢查端口

          [root@web03 ~]# netstat -tunlp|grep 12345

          tcp6 0 0 :::12345 :::* LISTEN 33158/java

          在windows上監(jiān)控tomcat

          注意:windwos需要安裝jdk環(huán)境!

          查考:http://www.oracle.com/technetwork/java/javase/downloads/index.html

          軟件路徑

          C:\Program Files\Java\jdk1.8.0_31\bin

          jconsole.exe jvisualvm.exe

          jconsole.exe 使用說明

          連接成功即可進(jìn)行監(jiān)控,連接的時候注意端口信息。

          jvisualvm.exe使用說明

          輸入ip地址

          主機(jī)添加完成,添加JMX監(jiān)控

          注意添加的時候輸入端口信息。

          添加完成后就能夠多tomcat程序進(jìn)行監(jiān)控。

          1.11.4 zabbix監(jiān)控tomcat程序

          zabbix搭建詳情參考:http://www.cnblogs.com/clsn/p/7885990.html

          服務(wù)端安裝配置java監(jiān)控服務(wù)

          [root@m01 ~]# yum install zabbix-java-gateway -y

          查看配置文件

          配置文件路徑:/etc/zabbix/zabbix_java_gateway.conf

          sed -i -e '220a JavaGateway=127.0.0.1' -e '236a StartJavaPollers=5' /etc/zabbix/zabbix_server.conf

          啟動zabbix-java-gateway服務(wù),與zabbix服務(wù)

          systemctl start zabbix-java-gateway.service

          systemctl restart zabbix-server.service

          檢查java端口是否開啟

          [root@m01 ~]# netstat -lntup |grep java

          tcp6 0 0 :::10052 :::* LISTEN 72971/java

          檢查java進(jìn)程是否存在

          [root@m01 ~]# ps -ef |grep [j]ava

          zabbix 72971 1 0 11:29 ? 00:00:00 java -server -Dlogback.configurationFile=/etc/zabbix/zabbix_java_gateway_logback.xml -classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-0.9.27.jar:lib/logback-core-0.9.27.jar:lib/slf4j-api-1.6.1.jar:bin/zabbix-java-gateway-3.0.13.jar -Dzabbix.pidFile=/var/run/zabbix/zabbix_java.pid -Dzabbix.timeout=3 -Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway

          zabbix 73255 73226 0 11:35 ? 00:00:00 /usr/sbin/zabbix_server: java poller #1 [got 0 values in 0.000002 sec, idle 5 sec]

          zabbix 73256 73226 0 11:35 ? 00:00:00 /usr/sbin/zabbix_server: java poller #2 [got 0 values in 0.000002 sec, idle 5 sec]

          zabbix 73257 73226 0 11:35 ? 00:00:00 /usr/sbin/zabbix_server: java poller #3 [got 0 values in 0.000002 sec, idle 5 sec]

          zabbix 73258 73226 0 11:35 ? 00:00:00 /usr/sbin/zabbix_server: java poller #4 [got 0 values in 0.000002 sec, idle 5 sec]

          zabbix 73259 73226 0 11:35 ? 00:00:00 /usr/sbin/zabbix_server: java poller #5 [got 0 values in 0.000004 sec, idle 5 sec]

          web界面添加

          添加主機(jī)

          主機(jī)管理模板,注意是JMX模板

          監(jiān)控完成

          1.11.5 排除tomcat故障步驟

          a. 查看catalina.out

          b. 使用sh show-busy-java-threads.sh腳本進(jìn)行檢測

          腳本下載地址

          https://files.cnblogs.com/files/clsn/show-busy-java-threads.sh

          1.12 Tomcat安全優(yōu)化

          1. telnet管理端口保護(hù)(強(qiáng)制)

          2. ajp連接端口保護(hù)(推薦)

          3. 禁用管理端(強(qiáng)制)

          4. 降權(quán)啟動(強(qiáng)制)

          [root@web03 ~]# useradd tomcat

          [root@web03 ~]# cp -a /application/tools/tomcat8_1 /home/tomcat/

          [root@web03 ~]# chown -R tomcat.tomcat /home/tomcat/tomcat8_1/

          [root@web03 ~]# su -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat

          Using CATALINA_BASE: /home/tomcat/tomcat8_1

          Using CATALINA_HOME: /home/tomcat/tomcat8_1

          Using CATALINA_TMPDIR: /home/tomcat/tomcat8_1/temp

          Using JRE_HOME: /application/jdk

          Using CLASSPATH: /home/tomcat/tomcat8_1/bin/bootstrap.jar:/home/tomcat/tomcat8_1/bin/tomcat-juli.jar

          Tomcat started.

          [root@web03 ~]# ps -ef|grep tomcat

          5.文件列表訪問控制(強(qiáng)制)

          6. 版本信息隱藏(強(qiáng)制)

          7. Server header重寫(推薦)

          8. 訪問限制(可選)

          9. 起停腳本權(quán)限回收(推薦)

          10. 訪問日志格式規(guī)范(推薦)

          11. 附錄:建議配置及標(biāo)準(zhǔn)執(zhí)行方案

          1. 配置部分(${ CATALINA_HOME }conf/server.xml)

          <Server port="8527" shutdown=" dangerous">

          <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->

          <Connector port="8080" server="webserver"/>

          <!-- Define an AJP 1.3 Connector on port 8528 -->

          <!--Define an accesslog -->

          <Valve className="org.apache.catalina.valves.AccessLogValve"

          directory="logs" prefix="localhost_access_log." suffix=".txt"

          pattern="%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i %D" resolveHosts="false"/>

          <Connector port="8528" protocol="AJP/1.3" />

          <Context path="" docBase="/home/work/local/tomcat_webapps" debug="0" reloadable="false" crossContext="true"/>

          2. 配置部分(${ CATALINA_HOME }conf/web.xml或者WEB-INF/web.xml)

          <init-param>

          <param-name>listings</param-name>

          <param-value>false</param-value>

          </init-param>

          <error-page>

          <error-code>403</error-code>

          <location>/forbidden.jsp</location>

          </error-page>

          <error-page>

          <error-code>404</error-code>

          <location>/notfound.jsp</location>

          </error-page>

          <error-page>

          <error-code>500</error-code>

          <location>/systembusy.jsp</location>

          </error-page>

          3. 刪除如下tomcat的默認(rèn)目錄和默認(rèn)文件

          tomcat/webapps/*

          tomcat/conf/tomcat-user.xml

          4. 去除其他用戶對tomcat 起停腳本的執(zhí)行權(quán)限

          chmod 744 –R tomcat/bin/*

          1.13 Tomcat性能優(yōu)化

          tomcat性能取決于 內(nèi)存大小

          上策:優(yōu)化代碼

          該項需要開發(fā)經(jīng)驗(yàn)足夠豐富,對開發(fā)人員要求較高

          中策:jvm優(yōu)化機(jī)制 垃圾回收機(jī)制 把不需要的內(nèi)存回收

          優(yōu)化jvm--優(yōu)化垃圾回收策略

          優(yōu)化catalina.sh配置文件。在catalina.sh配置文件中添加以下代碼

          # tomcat分配1G內(nèi)存模板

          JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"

          JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms800m -Xmx800m -XX:NewSize=400m -XX:MaxNewSize=400m -XX:PermSize=400m -XX:MaxPermSize=400m"

          # 重啟服務(wù)

          su -c '/home/tomcat/tomcat8_1/bin/shutdown.sh' tomcat

          su -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat

          修改之前

          修改之后


          主站蜘蛛池模板: 日本一区二区在线播放| 国产AV午夜精品一区二区三| 精品国产亚洲一区二区在线观看 | 一区二区三区四区在线视频| 乱子伦一区二区三区| 一区二区高清视频在线观看| 在线精品日韩一区二区三区| 人妻激情偷乱视频一区二区三区| 内射白浆一区二区在线观看| 国产精品一区视频| 亚洲一区二区久久| 久久国产精品一区免费下载| 成人区精品一区二区不卡 | 国产色欲AV一区二区三区| 国内精品一区二区三区东京| 精品一区二区三区波多野结衣| 日韩视频一区二区三区| 中文字幕一区二区三区有限公司 | 亚洲高清成人一区二区三区| 国内精品一区二区三区在线观看| 亚洲一区在线免费观看| 偷拍激情视频一区二区三区| 亚洲av无码一区二区三区观看| 国产成人无码一区二区在线播放| 国产午夜精品一区二区三区嫩草| 成人精品视频一区二区三区| 精品乱子伦一区二区三区| 一区二区三区伦理高清| 一区二区三区AV高清免费波多 | 欲色aV无码一区二区人妻| 国产精品综合AV一区二区国产馆| 亚洲av成人一区二区三区在线播放| 日韩一区二区在线视频| 亚洲码欧美码一区二区三区| 亚洲日韩一区二区三区| 免费看无码自慰一区二区| 日本一道一区二区免费看| 无码毛片一区二区三区中文字幕| 视频一区二区三区人妻系列| 国产av熟女一区二区三区| 在线播放国产一区二区三区 |