從網上查了不少資料,想瞭解一下如何整合Apache和Tomcat,以便讓Apache的httpd負責靜態內容,讓Tomcat負責動態內容的部分。
參考文章:
http://tomcat.apache.org/connectors-doc/generic_howto/quick.html
http://code-worker.javaeye.com/blog/246993
http://www.qqread.com/php/n652282101.html
http://tomcat.apache.org/connectors-doc/reference/workers.html
我自己試了一下,把具體過程記錄下來,以備今後查看。
1. 安裝Apache Http Server、Tomcat、Tomcat Connector(JK Module)
- Apache Httpd:從網上下載Apache Http Server 2.2.15的安裝版(貌似沒有免安裝壓縮版)。安裝時可以選擇將其安裝為系統服務或者每次手動啟動。我只是測試,所以選擇了後者,但後者預設將會監聽8080連接埠,注意不要與Tomcat預設的8080連接埠衝突了。這一項可以稍後在設定檔中修改。
- Tomcat:可以選擇免安裝壓縮版(我用的是6.0.18版),很方便,可以註冊為系統服務。
- JK Module:從http://tomcat.apache.org/download-connectors.cgi找到binary下載,下載目前最新版1.2.30檔案mod_jk-1.2.30-httpd-2.2.3.so,將其改名為mod_jk.so,置於Apache Http Server安裝目錄下的modules目錄中。
2. 建立workers.properties檔案
可以參考:http://tomcat.apache.org/connectors-doc/generic_howto/quick.html
這個worker.properties可以置於任何目錄下,我把它直接放在了Apache Http Server的安裝目錄下。
# 為mod_jk模組指明Tomcat的安裝路徑
workers.tomcat_home=D:/DevSoft/apache-tomcat-6.0.18
# 為mod_jk模組指明JDK的安裝路徑
workers.java_home=C:/Program Files/Java/jdk1.6.0_20
# 添加一個worker到worker列表
worker.list=worker1
# 為worker1設定各個參數
# 工作連接埠,Tomcat的預設Connector監聽連接埠,可以查看Tomcat的Server.xml中有port="8009"
worker.worker1.port=8009
# Tomcat所在機器,如果安裝在與apache不同的機器則需要設定IP
worker.worker1.host=localhost
# worker的類型,允許的值為ajp13、ajp14、lb、status等;ajp13是mod_jk串連WebServer和Tomcat的首選方式(即使用socket作為通訊渠道)
worker.worker1.type=ajp13
# Server Load Balancer因子
worker.worker1.lbfactor=1
註:worker.list中worker的名字應該是對應到Apache Http Server的httpd.conf設定檔中的JkMount的(後面詳述)。
3. 修改Apache Http Server的httpd.conf設定檔
修改Apache Http Server安裝目錄下的conf目錄下的httpd.conf檔案:
# 載入mod_jk模組,注意模組檔案的路徑
LoadModule jk_module modules/mod_jk.so
# 聲明workers.properties檔案的位置
JkWorkersFile "C:/Program Files/Apache Software Foundation/Apache2.2/workers.properties"
# 聲明mod_jk的記錄檔位置
JkLogFile "C:/Program Files/Apache Software Foundation/Apache2.2/logs/mod_jk.log"
# 聲明mod_jk的記錄層級(可選)
JkLogLevel info
# 聲明mod_jk的日誌的時間戳記格式(可選)
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# 將/*.action和/*.jsp類型的請求都分配給Tomcat,其餘類型的有Apache Http Server自己處理
# 注意JkMount後面的worker1即對應worker.properties檔案中worker.list裡的worker的名稱
JkMount /*.action worker1
JkMount /*.jsp worker1
4. 修改DirectoryRoot
網上的文章大多隻寫到上面就結束了,動態內容交給Tomcat之一步算是完成了,但靜態內容的分配還需接著設定httpd.conf檔案。
尋找到DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs"這一行,並將其值替換為Web應用的路徑:
DocumentRoot "D:/DevSoft/apache-tomcat-6.0.18/webapps"
尋找到<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs">這一行,並將其值替換為Web應用的路徑:
<Directory "D:/DevSoft/apache-tomcat-6.0.18/webapps">
至此,動態內容和靜態內容的請求分配,才基本完成。