Apache HTTP Server 與 Tomcat 的三種連線方式介紹
首先我們先介紹一下為什麼要讓 Apache 與 Tomcat 之間進行連線。事實上 Tomcat 本身已經提供了 HTTP 服務,該服務預設的埠是 8080,裝好 tomcat 後通過 8080 埠可以直接使用 Tomcat 所執行的應用程式,你也可以將該埠改為 80。
既然 Tomcat 本身已經可以提供這樣的服務,我們為什麼還要引入 Apache 或者其他的一些專門的 HTTP 伺服器呢?原因有下面幾個:
1. 提升對靜態檔案的處理效能
2. 利用 Web 伺服器來做負載均衡以及容錯
3. 無縫的升級應用程式
這三點對一個 web 網站來說是非常之重要的,我們希望我們的網站不僅是速度快,而且要穩定,不能因為某個 Tomcat 宕機或者是升級程式導致使用者訪問不了,而能完成這幾個功能的、最好的 HTTP 伺服器也就只有 apache 的 http server 了,它跟 tomcat 的結合是最緊密和可靠的。
接下來我們介紹三種方法將 apache 和 tomcat 整合在一起。
這是最常見的方式,你可以在網上找到很多關於配置JK的網頁,當然最全的還是其官方所提供的文件。JK 本身有兩個版本分別是 1 和 2,目前 1 最新的版本是 1.2.19,而版本 2 早已經廢棄了,以後不再有新版本的推出了,所以建議你採用版本 1。
JK 是通過 AJP 協議與 Tomcat 伺服器進行通訊的,Tomcat 預設的 AJP Connector 的埠是 8009。JK 本身提供了一個監控以及管理的頁面 jkstatus,通過 jkstatus 可以監控 JK 目前的工作狀態以及對到 tomcat 的連線進行設定,如下圖所示:
圖 1:監控以及管理的頁面 jkstatus
在這個圖中我們可以看到當前JK配了兩個連線分別到 8109 和 8209 埠上,目前 s2 這個連線是停止狀態,而 s1 這個連線自上次重啟後已經處理了 47 萬多個請求,流量達到 6.2 個 G,最大的併發數有 13 等等。我們也可以利用 jkstatus 的管理功能來切換 JK 到不同的 Tomcat 上,例如將 s2 啟用,並停用 s1,這個在更新應用程式的時候非常有用,而且整個切換過程對使用者來說是透明的,也就達到了無縫升級的目的。關於 JK 的配置文章網上已經非常多了,這裡我們不再詳細的介紹整個配置過程,但我要講一下配置的思路,只要明白了配置的思路,JK 就是一個非常靈活的元件。
JK 的配置最關鍵的有三個檔案,分別是
httpd.conf
Apache 伺服器的配置檔案,用來載入 JK 模組以及指定 JK 配置檔案資訊
workers.properties
到 Tomcat 伺服器的連線定義檔案
uriworkermap.properties
URI 對映檔案,用來指定哪些 URL 由 Tomcat 處理,你也可以直接在 httpd.conf 中配置這些 URI,但是獨立這些配置的好處是 JK 模組會定期更新該檔案的內容,使得我們修改配置的時候無需重新啟動 Apache 伺服器。
其中第二、三個配置檔名都可以自定義。下面是一個典型的 httpd.conf 對 JK 的配置
# (httpd.conf) # 載入 mod_jk 模組 LoadModule jk_module modules/mod_jk.so # # Configure mod_jk # JkWorkersFile conf/workers.properties JkMountFile conf/uriworkermap.properties JkLogFile logs/mod_jk.log JkLogLevel warn |
接下來我們在 Apache 的 conf 目錄下新建兩個檔案分別是 workers.properties、uriworkermap.properties。這兩個檔案的內容大概如下
# # workers.properties # # list the workers by name worker.list=DLOG4J, status # localhost server 1 # ------------------------ worker.s1.port=8109 worker.s1.host=localhost worker.s1.type=ajp13 # localhost server 2 # ------------------------ worker.s2.port=8209 worker.s2.host=localhost worker.s2.type=ajp13 worker.s2.stopped=1 worker.DLOG4J.type=lb worker.retries=3 worker.DLOG4J.balanced_workers=s1, s2 worker.DLOG4J.sticky_session=1 worker.status.type=status |
以上的 workers.properties 配置就是我們前面那個螢幕抓圖的頁面所用的配置。首先我們配置了兩個型別為 ajp13 的 worker 分別是 s1 和 s2,它們指向同一臺伺服器上執行在兩個不同埠 8109 和 8209 的 Tomcat 上。接下來我們配置了一個型別為 lb(也就是負載均衡的意思)的 worker,它的名字是 DLOG4J,這是一個邏輯的 worker,它用來管理前面配置的兩個物理連線 s1 和 s2。最後還配置了一個型別為 status 的 worker,這是用來監控 JK 本身的模組。有了這三個 worker 還不夠,我們還需要告訴 JK,哪些 worker 是可用的,所以就有 worker.list = DLOG4J, status 這行配置。
接下來便是 URI 的對映配置了,我們需要指定哪些連結是由 Tomcat 處理的,哪些是由 Apache 直接處理的,看看下面這個檔案你就能明白其中配置的意義
/*=DLOG4J /jkstatus=status !/*.gif=DLOG4J !/*.jpg=DLOG4J !/*.png=DLOG4J !/*.css=DLOG4J !/*.js=DLOG4J !/*.htm=DLOG4J !/*.html=DLOG4J |
相信你已經明白了一大半了:所有的請求都由 DLOG4J 這個 worker 進行處理,但是有幾個例外,/jkstatus 請求由 status 這個 worker 處理。另外這個配置中每一行資料前面的感嘆號是什麼意思呢?感嘆號表示接下來的 URI 不要由 JK 進行處理,也就是 Apache 直接處理所有的圖片、css 檔案、js 檔案以及靜態 html 文字檔案。
通過對 workers.properties 和 uriworkermap.properties 的配置,可以有各種各樣的組合來滿足我們前面提出對一個 web 網站的要求。您不妨動手試試!
這是利用 Apache 自帶的 mod_proxy 模組使用代理技術來連線 Tomcat。在配置之前請確保是否使用的是 2.2.x 版本的 Apache 伺服器。因為 2.2.x 版本對這個模組進行了重寫,大大的增強了其功能和穩定性。
http_proxy 模式是基於 HTTP 協議的代理,因此它要求 Tomcat 必須提供 HTTP 服務,也就是說必須啟用 Tomcat 的 HTTP Connector。一個最簡單的配置如下
ProxyPass /images ! ProxyPass /css ! ProxyPass /js ! ProxyPass / http://localhost:8080/ |
在這個配置中,我們把所有 http://localhost 的請求代理到 http://localhost:8080/ ,這也就是 Tomcat 的訪問地址,除了 images、css、js 幾個目錄除外。我們同樣可以利用 mod_proxy 來做負載均衡,再看看下面這個配置
ProxyPass /images ! ProxyPass /css ! ProxyPass /js ! ProxyPass / balancer://example/ <Proxy balancer://example/> BalancerMember http://server1:8080/ BalancerMember http://server2:8080/ BalancerMember http://server3:8080/ </Proxy> |
配置比 JK 簡單多了,而且它也可以通過一個頁面來監控叢集執行的狀態,並做一些簡單的維護設定。
圖 2:監控叢集執行狀態
ajp_proxy 連線方式其實跟 http_proxy 方式一樣,都是由 mod_proxy 所提供的功能。配置也是一樣,只需要把 http:// 換成 ajp:// ,同時連線的是 Tomcat 的 AJP Connector 所在的埠。上面例子的配置可以改為:
ProxyPass /images ! ProxyPass /css ! ProxyPass /js ! ProxyPass / balancer://example/ <Proxy balancer://example/> BalancerMember ajp://server1:8080/ BalancerMember ajp://server2:8080/ BalancerMember ajp://server3:8080/ </Proxy> |
採用 proxy 的連線方式,需要在 Apache 上載入所需的模組,mod_proxy 相關的模組有 mod_proxy.so、mod_proxy_connect.so、mod_proxy_http.so、mod_proxy_ftp.so、mod_proxy_ajp.so, 其中 mod_proxy_ajp.so 只在 Apache 2.2.x 中才有。如果是採用 http_proxy 方式則需要載入 mod_proxy.so 和 mod_proxy_http.so;如果是 ajp_proxy 則需要載入 mod_proxy.so 和 mod_proxy_ajp.so這兩個模組。
相對於 JK 的連線方式,後兩種在配置上是比較簡單的,靈活性方面也一點都不遜色。但就穩定性而言就不像 JK 這樣久經考驗,畢竟 Apache 2.2.3 推出的時間並不長,採用這種連線方式的網站還不多,因此,如果是應用於關鍵的網際網路網站,還是建議採用 JK 的連線方式。
相關推薦
Apache HTTP Server 與 Tomcat 的三種連線方式介紹
首先我們先介紹一下為什麼要讓 Apache 與 Tomcat 之間進行連線。事實上 Tomcat 本身已經提供了 HTTP 服務,該服務預設的埠是 8080,裝好 tomcat 後通過 8080 埠可以直接使用 Tomcat 所執行的應用程式,你也可以將該埠改為 80。
《轉載》Apache HTTP Server 與 Tomcat 的三種連接方式介紹
之前 img 6.2 自定義 con 訪問 ont 是什麽 bsp 本文轉載自IBM developer 首先我們先介紹一下為什麽要讓 Apache 與 Tomcat 之間進行連接。事實上 Tomcat 本身已經提供了 HTTP 服務,該服務默認的端口是 8080,裝好 t
Server 與Tomcat的三種連線方式介紹
以上的 workers.properties 配置就是我們前面那個螢幕抓圖的頁面所用的配置。首先我們配置了兩個型別為 ajp13 的 worker 分別是 s1 和 s2,它們指向同一臺伺服器上執行在兩個不同埠 8109 和 8209 的 Tomcat 上。接下來我們配置了一個型別為 lb(也就是負載均衡的意
apache和tomcat三種連線方式
首先我們先介紹一下為什麼要讓 Apache 與 Tomcat 之間進行連線。事實上 Tomcat 本身已經提供了 HTTP 服務,該服務預設的埠是 8080,裝好 tomcat 後通過 8080 埠可以直接使用 Tomcat 所執行的應用程式,你也可以將該埠改為 80。
使用mod_jk整合Apache HTTP Server和Tomcat
前言 我們的一個新專案是一個RESTful架構風格的程式,伺服器端用Java編寫,對客戶端提供REST Web Service。使用Tomcat作為Servlet Container,Tomcat本身是無狀態的(stateless,REST的特點),無需做Se
JDBC三種連線方式
第一種連線方式 package cn.itheima.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.
JS----直接呼叫函式與call呼叫的區別 (函式的三種呼叫方式介紹)
直接呼叫 直接呼叫函式是最常見 最普通的方式,直接以函式附加的物件作為呼叫者, 在函式後括號內傳入引數來呼叫函式 例如: window.alert("測試程式碼"); 其中呼叫者如果是window可以省略, 即直接alert("測試程式碼"); 以call() 方法
oracle三種連線方式
1.sid: 格式一: Oracle JDBC Thin using an SID: jdbc:oracle:thin:@host:port:SID Example: jdbc:oracle:thin:@localhost:1521:orcl 這種格式是最簡單也是用得
Dubbo的三種連線方式
1、採用zookeeper作為註冊中心 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://ww
Css與html三種結合方式 Css四種選擇器
一、css與html的結合 三種方式、html與css結合如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
Java連線Oracle資料庫的三種連線方式
背景: 這兩天在學習Oracle資料庫,這裡就總結下自己上課所學的知識,同時記錄下來,方便整理當天所學下的知識,也同時方便日後自己查詢。 SQL語句的話,這裡我就不多講了,感覺和其他的資料庫(MySQL、SQL Server)都是類似,區別不大。 今天在這
Hive學習 (三)Hive的連線三種連線方式
目錄一、CLI連線二、HiveServer2/beeline 1、修改 hadoop 叢集的 hdfs-site.xml 配置檔案 2、修改 hadoop 叢集的 core-site.xml 配置檔案三、Web UI正文:一、CLI連線進入到 bin 目錄下,直接
redis三種連線方式
Part I. 直接啟動 下載 官網下載 安裝 tar zxvf redis-2.8.9.tar.gz cd redis-2.8.9 #直接make 編譯 make #可使用root使用者執行`make install`,將可執行檔案拷貝到/usr/local/b
hana的三種連線方式
環境準備 java1.6以上版本 hana jdbc jar包 通過cmd連線hana 在hana jdbc jar包所在目錄執行,其中-u 資料庫賬號,密碼,-n IP:埠 ,-c 操作語句 埠:3 + instance number + 15
mybatis與Spring三種開發方式詳解(二&三)Mapper動態代理開發&Mapper動態代理掃描包形式開發
mybatis與Spring三種開發方式詳解(二)Mapper動態代理開發 之前我們說到傳統的dao層開發,今天我們來談談第二種mybatis與Spring的開發方式,Mapper動態代理開發。 首先這裡上一波@test測試程式碼,大家先看一下mybat
oracle中Normal,sysdba,sysoper三種連線方式和使用者sys,system,sysdba,scott
sys和system使用者的區別 【system】使用者只能用normal身份登陸em。 【sys】使用者具有“SYSDBA”或者“SYSOPER”許可權,登陸em也只能用這兩個身份,不能用normal。 “SYSOPER”許可權,即資料庫操作員許可權,許可權包括: 開啟資料庫伺服器 關閉資料庫伺服
分散式鎖簡單三種實現方式介紹
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u010870518/article/details/79036337 很多小夥伴在學習Java的時候,總是感覺Java多執行緒在實際的業務中很少使用,以至於不會花太
分散式鎖簡單入門以及三種實現方式介紹
分散式鎖應該具備哪些條件 在分析分散式鎖的三種實現方式之前,先了解一下分散式鎖應該具備哪些條件: 1、在分散式系統環境下,一個方法在同一時間只能被一個機器的一個執行緒執行; 2、高可用的獲取鎖與釋放鎖; 3、高效能的獲取鎖與釋放鎖; 4、具備可重入特性; 5、具備鎖
CSS的三種定位方式介紹
在CSS中一共有N種定位方式,其中,static ,relative,absolute三種方式是最基本最常用的三種定位方式。他們的基本介紹如下。static預設定位方式relative相對定位,相對於原來的位置,但是原來的位置仍然保留absolute定位,相對於最近的非標準劉定
xml中三種解析方式介紹
1)dom: 文件物件模型(Document Object Model) 官方推薦的標準 dom原理:會把我們要解析的整個xml載入到到記憶體中.在記憶體中形成一個樹形結構 優點:可以進行增刪改查 缺點:由於把整個文件載入到記憶體中.所以會造成記憶體