- 前言
Apache HTTP Server(后面簡稱Apache)是web服務器,Tomcat是servlet服務器。Apache處理靜態頁面和資源文件的能力大于Tomcat本身的處理能力。在高訪問量的網站應用中,整合后的體系結構使Apache和Tomcat分工協作,能大幅提高系統處理能力。此外也可以通過連接器的參數設置讓其支持應用壓力的負載均衡等等額外功能。
可以這么理解他們之間的整合,每個Tomcat worker是一個服務于web服務器、等待執行servlet的Tomcat實例。使用像Apache之類的web服務器轉發servlet請求給位于其后面的一個Tomcat進程(也就是前面所說的worker)。
本文通過ajp13協議實現Apache與Tomcat的整合。
- 安裝
分別下載Tomcat6.X和Apache2.X版本安裝。
1)Apache2.X:http://httpd.apache.org/ 具體的下載點自己找吧
2)Tomcat6.X:http://tomcat.apache.org/
3)連接器:http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.30/ 針對Apache的版本下載合適的連接器文件mod_jk-*.so,注意連接器的版本能分別支持Apache httpd和Tomcat的版本就行,所提供鏈接僅供參考。
- 整合
1)將mod_jk-*.so更名為mod_jk.so文件并拷貝入Apache根目錄下modules子目錄中。
2)Apache根目錄下conf子目錄中建立連接器工作參數配置文件workers.properties,打開并編輯如下:
workers.tomcat_home="D:\apache-tomcat-6.0.16"
workers.java_home="D:\jdk1.6.0_18"
ps=\
wk.list=ajp13
wk.ajp13.port=8009
wk.ajp13.host=localhost
wk.ajp13.type=ajp13
wk.ajp13.lbfactor=50
wk.ajp13.cachesize=10
wk.ajp13.cache_timeout=600
wk.ajp13.socket_keepalive=1
wk.ajp13.socket_timeout=300
3)打開conf目錄下httpd.conf文件,補充配置如下:
LoadModule jk_module modules/mod_jk.so #加載Apache與Tomcat的連接器組件
JkWorkersFile conf/workers.properties #指定連接器的參數配置文件
JkMount /*.do ajp13 #指定*.do為轉發的請求類型
JkMount /*.jsp ajp13 #指定*.jsp為轉發的請求類型
4)執行“開始->程序->Apache HTTP Server 2.X->Configure Apache Server->Test Configuration”驗證mod_jk是否安裝正常,如果有錯會顯示如下窗口(圖 3.4-1),需進一步檢查連接器版本與Apache、Tomcat是否匹配。
圖 3.4-1
5)驗證通過后可以測試整合是否成功了
在Tomcat webapps目錄下新建foo應用,并創建test.jsp內容如下:
完成之后分別啟動Tomcat和Apache HTTP Server。<%
out.println("test ok!");
%>
在瀏覽器中打開:http://localhost:8080/foo/test.jsp 顯示正常
再打開:http://localhost/foo/test.jsp 顯示相同,那么說明Tomcat整合Apache HTTP Server已經成功了。
如果只啟動了Apache HTTP Server而未啟動Tomcat,則報錯(如圖 3.5-1)。
圖 3.5-1
- 綁定域名
步驟如下:
1)在“C:\WINDOWS\system32\drivers\etc\hosts”文件中加入一行:xxx.xxx.xxx.xxx www.apoz.org
2)在Tomcat配置文件server.xml中,加入:
3)啟動Tomcat,在瀏覽器中打開:http://www.apoz.org:8080/test.jsp ,OK訪問正常,通過綁定域名訪問Tomcat應用成功。<Host name="www.apoz.org" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="foo" path="" debug="0" reloadable="true"/>
</Host>