這篇是要說明如何將Apache HTTP Server(簡稱Apache)和Apache Tomcat(簡稱Tomcat)結合,這樣做的目的,可以讓Tomcat專心執行動態網頁JSP,而Apache就提供靜態網頁,或是做負載平衡的動作。
要怎麼讓這兩個server軟體結合?要用一個所謂的connector(連結器),這個連接器要安裝在Apache這端,因為Tomcat已經提供這個介面,但是Apache沒有,所以Apache需要額外安裝!
除了連接器之外,另一個方法是用proxy代理的方式,將HTTP request由Apache轉給Tomcat,這種方式是說效率比較差,實際上到底是不是這樣,需要進一步研究!
要讓Apache可以和Tomcat溝通,首先需要安裝mod_jk這個模組,請至Apache Tomcat Connector網站上下載,選擇binary的檔案格式(寫這篇blog時是1.2.28),因為我們是要安裝在Apache上面,所以請挑選binaries/win32/jk-1.2.28/mod_jk-1.2.28-httpd-2.2.3.so。我要安裝的Apache是2.2.x的版本,所以挑選這個檔案,如果是其他版本的Apache請注意網站說明挑選。
將mod_jk-1.2.28-httpd-2.2.3.so複製到C:\Program Files\Apache Software Foundation\Apache2.2\modules路徑下面,這是預設的module模組路徑。(說明文件建議將檔名改成mod_jk.so,但我們先保留吧!以便後續的識別。)
接下來需要更改設定檔,路徑如下:
- Apache HTTP Server的設定檔
C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf - Apache Tomcat的設定檔(不會變更到,只是提醒這是Tomcat的設定檔)
C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\server.xml
在C:\Program Files\Apache Software Foundation\Apache2.2\conf\目錄中,新增workers.properties.conf的檔案,這是用來設定connector的設定檔。(說明文件建議檔名為workers.properties ,不是用conf的副檔名,我們統一使用conf來操作)
workers.properties.conf內容為:(共6列,#符號開始為註解,設定資訊http://tomcat.apache.org/connectors-doc/reference/workers.html)
# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
# Load mod_jk module
LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.2.3.so
# Where to find workers.properties
JkWorkersFile conf/workers.properties.conf
# Where to put jk shared memory
JkShmFile logs/mod_jk.shm
# Where to put jk logs
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the timestamp log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# Send everything for context /examples to worker named worker1 (ajp13)
JkMount /examples/* worker1
另外順便提一下Apache的log檔設定,ErrorLog是記錄錯誤,而CustomLog是記錄請求狀況,這裡使用bin/rotatelogs.exe這個程式,並依照時間或是大小更換檔案,頗有用的,避免檔案太大不易查詢!
- ErrorLog "|bin/rotatelogs.exe logs/error_%Y%m%d.log 10M"
- CustomLog "|bin/rotatelogs.exe logs/access_%Y%m%d.log 86400 480" combined