Tomcat - 你该知道的Tomcat生产环境部署
文章目錄
- Pre
- Tomcat 各組件及關系
- server.xml 配置詳解
- server
- service
- connector
- Engine
- Host
- Context
- Tomcat與App應用分開部署
Pre
Tomcat Version : 8.5+
我們先回顧下 前幾節學習的的tomcat的功能及架構
Tomcat是一個基于JAVA的WEB容器,其實現了JAVA EE中的 Servlet 與 jsp 規范,與Nginx apache 服務器不同在于一般用于動態請求處理。
在架構設計上采用面向組件的方式設計, 即整體功能是通過組件的方式拼裝完成。
Tomcat 各組件及關系
-
Server 和 Service
-
Connector 連接器
? HTTP 1.1
? SSL https
? AJP( Apache JServ Protocol) apache 私有協議,用于apache 反向代理Tomcat -
Container
? Engine 引擎 catalina
? Host 虛擬機 基于域名 分發請求
? Context 隔離各個WEB應用 每個Context的 ClassLoader都是獨立 -
Component
? Manager (管理器)
? logger (日志管理)
? loader (載入器)
? pipeline (管道)
? valve (管道中的閥)
server.xml 配置詳解
上述組件,都是可以在server.xml中配置
server
root元素 , server 的頂級配置
主要屬性:
- port:執行關閉命令的端口號
- shutdown:關閉命令
基于telent 執行SHUTDOWN 命令即可關閉(必須大寫)
telnet 127.0.0.1 8005 SHUTDOWNservice
服務:將多個connector 與一個Engine組合成一個服務,可以配置多個服務。
connector
連接器:用于接收 指定協議下的連接 并指定給唯一的Engine 進行處理。
主要屬性:
- protocol 監聽的協議,默認是http/1.1
- port 指定服務器端要創建的端口號
- minThread服務器啟動時創建的處理請求的線程數
- maxThread最大可以創建的處理請求的線程數
- enableLookups如果為true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端的實際主機名,若為false則不進行DNS查詢,而是返回其ip地址
- redirectPort指定服務器正在處理http請求時收到了一個SSL傳輸請求后重定向的端口號
- acceptCount指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理
- connectionTimeout指定超時的時間數(以毫秒為單位) 【請求連接tomcat的最大超時時間,如果超過該時間,tomcat自動掐斷該請求。如果當前可使用的線程都被使用,connectionTimeout時間內還是沒有線程能處理該請求,即超時 】
- SSLEnabled 是否開啟 SSL 驗證,在Https 訪問時需要開啟。
舉個例子
<Connector port="8860" protocol="org.apache.coyote.http11.Http11NioProtocol"connectionTimeout="20000"redirectPort="8862"URIEncoding="UTF-8"useBodyEncodingForURI="true"compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css,application/x-json,application/json,application/x-javascript"maxThreads="1024" minSpareThreads="200"acceptCount="800"enableLookups="false"/>Engine
引擎:用于處理連接的執行器,默認的引擎是catalina。一個service 中只能配置一個Engine。
主要屬性:name 引擎名稱 defaultHost 默認host
Host
虛擬機:基于域名匹配至指定虛擬機。類似于nginx 當中的server,默認的虛擬機是localhost. 主要屬性
舉例配置多個Host
<Host name="www.luban.com" appBase="/usr/www/artisan"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="www.artisan.com.access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /> </Host>Context
應用上下文:一個host 下可以配置多個Context ,每個Context 都有其獨立的classPath。相互隔離,以免造成ClassPath 沖突。
舉例配置多個Context
<Context docBase="hello" path="/h" reloadable="true"/>docBase 不能有 / , 否則是根目錄
Tomcat與App應用分開部署
我們平時啟動Tomcat過程是怎么樣的?
再回想我們在idea 中啟動WEB項目的時候 也是把War包復雜至webapps 目錄解壓嗎?
顯然不是,其真正做法是在Tomcat程序文件之外創建了一個部署目錄,在一般生產環境中也是這么做的 即:Tomcat 程序目錄和部署目錄分開 。
我們只需要在啟動時指定CATALINA_HOME 與 CATALINA_BASE 參數即可實現。
| JAVA_OPTS | jvm 啟動參數 , 設置內存 編碼等 -Xms200m -Xmx200m -Dfile.encoding=UTF-8 |
| JAVA_HOME | 指定jdk 目錄,如果未設置從java 環境變量當中去找。 |
| CATALINA_HOME | Tomcat 程序根目錄 |
| CATALINA_BASE | 應用部署目錄,默認為$CATALINA_HOME |
| CATALINA_OUT | 應用日志輸出目錄:默認$CATALINA_BASE/logs |
| CATALINA_TMPDIR | 應用臨時目錄:默認:$CATALINA_BASE/temp |
好處很明顯:
- 不會和 tomcat耦合在一起,升級tomcat版本很方便 ,搞個軟連接愛指哪兒指哪兒
- 配置文件隔離 : conf目錄每個app都有一份,那豈不是什么端口號啊 想改就改~ ,改了這個AP的,也不影響另外一個AP的。因為conf是每個應用都有自己的嘛
當然了,缺點也是你得搞個啟動腳本
操作步驟:
以上是一個比較簡單的啟動tomcat的腳本,本質上也是調用catalina.sh 。
可以調用 tomcat.sh/configtest 來驗證配置是否正確。
總結
以上是生活随笔為你收集整理的Tomcat - 你该知道的Tomcat生产环境部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tomcat - 源码分析Tomcat是
- 下一篇: Tomcat - Tomcat 网络通信