2006/12/11 作者:劉冬 心情:
首先我們先介紹一下為什么要讓Apache與Tomcat之間進行連接。事實上Tomcat本身已經(jīng)提供了HTTP服務,該服務默認的端口是8080,裝好tomcat后通過8080端口可以直接使用Tomcat所運行的應用程序,你也可以將該端口改為80。 既然Tomcat本身已經(jīng)可以提供這樣的服務,我們?yōu)槭裁催€要引入Apache或者其他的一些專門的HTTP服務器呢?原因有下面幾個: 1. 提升對靜態(tài)文件的處理性能 這三點對一個web網(wǎng)站來說是非常之重要的,我們希望我們的網(wǎng)站不僅是速度快,而且要穩(wěn)定,不能因為某個Tomcat宕機或者是升級程序?qū)е掠脩粼L問不了,而能完成這幾個功能的、最好的HTTP服務器也就只有apache的http server了,它跟tomcat的結(jié)合是最緊密和可靠的。 接下來我們介紹三種方法將apache和tomcat整合在一起。 一. JK 這是最常見的方式,你可以在網(wǎng)上找到很多關于配置JK的網(wǎng)頁,當然最全的還是其官方所提供的文檔。JK本身有兩個版本分別是1和2,目前1最新的版本是1.2.19,而版本2早已經(jīng)廢棄了,以后不再有新版本的推出了,所以建議你采用版本1。 JK是通過AJP協(xié)議與Tomcat服務器進行通訊的,Tomcat默認的AJP Connector的端口是8009。JK本身提供了一個監(jiān)控以及管理的頁面jkstatus,通過jkstatus可以監(jiān)控JK目前的工作狀態(tài)以及對到tomcat的連接進行設置,如下圖所示 在這個圖中我們可以看到當前JK配了兩個連接分別到8109和8209端口上,目前s2這個連接是停止狀態(tài),而s1這個連接自上次重啟后已經(jīng)處理了47萬多個請求,流量達到6.2個G,最大的并發(fā)數(shù)有13等等。我們也可以利用jkstatus的管理功能來切換JK到不同的Tomcat上,例如將s2啟用,并停用s1,這個在更新應用程序的時候非常有用,而且整個切換過程對用戶來說是透明的,也就達到了無縫升級的目的。關于JK的配置文章網(wǎng)上已經(jīng)非常多了,這里我們不再詳細的介紹整個配置過程,但我要講一下配置的思路,只要明白了配置的思路,JK就是一個非常靈活的組件。 JK的配置最關鍵的有三個文件,分別是 httpd.conf workers.properties uriworkermap.properties 其中第二、三個配置文件名都可以自定義。下面是一個典型的 httpd.conf 對JK的配置 # (httpd.conf) # JkWorkersFile conf/workers.properties 接下來我們在Apache的conf目錄下新建兩個文件分別是 workers.properties、uriworkermap.properties。這兩個文件的內(nèi)容大概如下 #
worker.list=DLOG4J, status # localhost server 1 # localhost server 2 worker.DLOG4J.type=lb worker.status.type=status 以上的workers.properties配置就是我們前面那個屏幕抓圖的頁面所用的配置。首先我們配置了兩個類型為ajp13的worker分別是s1和s2,它們指向同一臺服務器上運行在兩個不同端口8109和8209的Tomcat上。接下來我們配置了一個類型為lb(也就是負載均衡的意思)的worker,它的名字是DLOG4J,這是一個邏輯的worker,它用來管理前面配置的兩個物理連接s1和s2。最后還配置了一個類型為status的worker,這是用來監(jiān)控JK本身的模塊。有了這三個worker還不夠,我們還需要告訴JK,哪些worker是可用的,所以就有worker.list = DLOG4J, status 這行配置。 接下來便是URI的映射配置了,我們需要指定哪些鏈接是由Tomcat處理的,哪些是由Apache直接處理的,看看下面這個文件你就能明白其中配置的意義 /*=DLOG4J !/*.gif=DLOG4J 相信你已經(jīng)明白了一大半了:所有的請求都由DLOG4J這個worker進行處理,但是有幾個例外,/jkstatus請求由status這個worker處理。另外這個配置中每一行數(shù)據(jù)前面的感嘆號是什么意思呢?感嘆號表示接下來的URI不要由JK進行處理,也就是Apache直接處理所有的圖片、css文件、js文件以及靜態(tài)html文本文件。 通過對workers.properties和uriworkermap.properties的配置,可以有各種各樣的組合來滿足我們前面提出對一個web網(wǎng)站的要求。您不妨動手試試! 二. http_proxy 這是利用Apache自帶的mod_proxy模塊使用代理技術(shù)來連接Tomcat。在配置之前請確保是否使用的是2.2.x版本的Apache服務器。因為2.2.x版本對這個模塊進行了重寫,大大的增強了其功能和穩(wěn)定性。 http_proxy模式是基于HTTP協(xié)議的代理,因此它要求Tomcat必須提供HTTP服務,也就是說必須啟用Tomcat的HTTP Connector。一個最簡單的配置如下 ProxyPass /images ! 在這個配置中,我們把所有 http://localhost 的請求代理到 http://localhost:8080/ ,這也就是Tomcat的訪問地址,除了images、css、js幾個目錄除外。我們同樣可以利用mod_proxy來做負載均衡,再看看下面這個配置 ProxyPass /images ! ProxyPass / balancer://example/ 配置比JK簡單多了,而且它也可以通過一個頁面來監(jiān)控集群運行的狀態(tài),并做一些簡單的維護設置。 三. ajp_proxy ajp_proxy連接方式其實跟http_proxy方式一樣,都是由mod_proxy所提供的功能。配置也是一樣,只需要把http:// 換成 ajp:// ,同時連接的是Tomcat的AJP Connector所在的端口。上面例子的配置可以改為 ProxyPass /images ! ProxyPass / balancer://example/ 采用proxy的連接方式,需要在Apache上加載所需的模塊,mod_proxy 相關的模塊有 四. 三者比較 相對于JK的連接方式,后兩種在配置上是比較簡單的,靈活性方面也一點都不遜色。但就穩(wěn)定性而言就不像JK這樣久經(jīng)考驗,畢竟Apache 2.2.3推出的時間并不長,采用這種連接方式的網(wǎng)站還不多,因此,如果是應用于關鍵的互聯(lián)網(wǎng)網(wǎng)站,還是建議采用JK的連接方式。
Apache http://httpd. 關于作者 劉冬,一直使用J2EE/J2ME從事移動互聯(lián)網(wǎng)方面的開發(fā)。您可以通過Java自由人網(wǎng)站來跟他聯(lián)系,網(wǎng)址是:http://www./javayou ,另外他的郵件地址是javayou@gmail.com。 引用地址: http://www./html/trackback.do?id=4780&type=1 (復制地址)
|
|