Apache HTTP Server與Tomcat的三種連接方式介紹

首先我們介紹一下爲什麼要讓Apache與Tomcat之間進行連接。事實上Tomcat本身已經提供了HTTP服務, 該服務默認端口是8080,安裝好Tomcat後通過8080端口可以直接訪問Tomcat所運行的應用程序,你也可以將該端口號修改爲8080。
既然Tomcat本身已經可以提供這樣的服務,我們爲什麼還要引入Apache或者其他的一些專門的HTTP服務器呢?原因有下面幾個:
1. 提升對靜態文件的處理性能
2. 利用Web服務器來做負載均衡以及容錯
3. 無縫的升級應用程序
這三點對一個web網站來說是非常重要的,我們希望自己的網站不僅速度快,而且要穩定,不能因爲某個Tomcat宕機或者是升級程序導致用戶無法訪問,而完成這幾個功能最好的HTTP服務器也就只有Apache的HTTP Server了,它跟Tomcat的結合緊密且可靠。
接下來我們介紹將Apache和Tomcat整合在一起的三種方法。

JK

這種事最常見的方式,你可以在網上找到很多關於配置JK的網頁,當然最全面的還是其官方網站提供的文檔。目前最新的版本是1.2.41
JK是通過AJP協議與Tomcat服務器進行通訊的,Tomcat默認的AJP Connector的端口是8009。JK本身提供了一個監控及管理的頁面jkstatus,通過jkstatus可以監控JK目前的工作狀態,還可以對Tomcat連接進行設置,如下圖所示:

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
JMountFile conf/uriworkermap.properties
JKLogFile logs/mod_jk.log
JkLogLevel warn

接下來我們在Apache的conf目錄下新建兩個文件分別是workers.properties、uriwokermap.properties。這兩個文件的內容大概如下:

#
# workers.properties
#

# lis the workers by name

worker.list=DLOG4J, status

# localhost server 1
# ------------------
worker.s1.prot=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網站的要求,您不妨動手試試!


http_proxy

這是利用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/>
BalanceMember http://server1:8080/
BalanceMember http://server2:8080/
BalanceMember http://server3:8080/
</Proxy>

配置比JK簡單多了,而且它也可以通過一個頁面來監控集羣運行的狀態,並做一些簡單的維護設置。


ajp_proxy

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相關的模塊有mode_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這兩個模塊。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章