1. 程式人生 > >Apache HTTP Server 與 Tomcat 的三種連線方式介紹

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的網頁,當然最全的還是其官方所提供的文件。JK 本身有兩個版本分別是 1 和 2,目前 1 最新的版本是 1.2.19,而版本 2 早已經廢棄了,以後不再有新版本的推出了,所以建議你採用版本 1。

JK 是通過 AJP 協議與 Tomcat 伺服器進行通訊的,Tomcat 預設的 AJP Connector 的埠是 8009。JK 本身提供了一個監控以及管理的頁面 jkstatus,通過 jkstatus 可以監控 JK 目前的工作狀態以及對到 tomcat 的連線進行設定,如下圖所示:


圖 1:監控以及管理的頁面 jkstatus
圖 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:監控叢集執行狀態
圖 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(也就是負載均衡的意

apachetomcat連線方式

首先我們先介紹一下為什麼要讓 Apache 與 Tomcat 之間進行連線。事實上 Tomcat 本身已經提供了 HTTP 服務,該服務預設的埠是 8080,裝好 tomcat 後通過 8080 埠可以直接使用 Tomcat 所執行的應用程式,你也可以將該埠改為 80。

使用mod_jk整合Apache HTTP ServerTomcat

前言 我們的一個新專案是一個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

Csshtml結合方式 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

mybatisSpring開發方式詳解(二&)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載入到到記憶體中.在記憶體中形成一個樹形結構 優點:可以進行增刪改查 缺點:由於把整個文件載入到記憶體中.所以會造成記憶體