使用jk_module整合Tomcat到Apache

原文地址:http://hi.baidu.com/cnkarl/item/c169a2bffd037f47ba0e12dd

JK 本身有兩個版本分別是 1 和 2,目前 1 最新的版本是 1.2.19,而版本 2 早已經廢棄了,以後不再有新版本的推出了,所以建議你採用版本 1。
注意JK的每個版本都對應一個apache版本。Jk下載可以直接到apache.org官網下載,有多種版本,適用於各種操作系統,地址如下:
http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/

本文以 win32/jk-1.2.28/mod_jk-1.2.28-httpd-2.2.3.so 爲例

下載完JK的so模塊後,放在${APACHE_HOME}\modules\mod_jk.so


Apache2.2 配置
打開配置文件:${APACHE_HOME}\conf\httpd.conf
在配置文件最後加入以下加載JK的內容:

#加載jk模塊
LoadModule jk_module modules/mod_jk.so

#設定jk workers配置文件
JkWorkersFile conf/workers.properties

#jk log文件
JkLogFile logs/mod_jk.log

#jk log級別
JkLogLevel warn


#設置網站虛擬主機
<VirtualHost *:80>
#域名和映射
ServerName www.mywebsite.com
ServerAlias www.mywebsite.com

#網站根 (應該指向程序源代碼的webRoot目錄,這裏的例子應用的webRoot目錄就是應用根目錄)
DocumentRoot "F:/workspace/MyEclipse7/mywebsite"

#主頁面
DirectoryIndex index.jsp

#錯誤日誌
ErrorLog logs/mywebsite_error_log.txt
#自定義訪問日誌
CustomLog logs/mywebsite_access_log.txt common

#jk mount映射文件
JkMountFile conf/mywebsite_uriworkermap.properties
#也可以在這裏直接寫映射關係,如:
#JkMount /*.jsp myworkerName

</VirtualHost>

在上面的配置中,使用到兩個配置文件,這兩個文件就是JK的主要配置文件:
到 Tomcat 服務器的連接定義文件
conf/workers.properties
URI 映射文件,用來指定哪些 URL 由 Tomcat 處理
conf/mywebsite_uriworkermap.properties

在${APACHE_HOME}\conf\目錄下,創建這兩個文件。


JK配置
1.打開 ${APACHE_HOME}\conf\workers.properties 文件,寫入以下內容:

worker.list=myeclipseTomcat, status

# list the workers by name

# localhost server 1
# ------------------------

worker.myeclipseTomcat.port=8009
worker.myeclipseTomcat.host=localhost
worker.myeclipseTomcat.type=ajp13

#status worker, listening jk's status
worker.status.type=status

上面內容中的worker.list指定了當前可用的兩個worker:myeclipseTomcat和status;
worker.myeclipseTomcat.*配置的正是是myeclipse中內置的Tomcat。
worker.status配置了一個用來監控 JK 本身工作狀況的模塊。
這裏可以用更復雜的配置來實現Tomcat分佈式、以及負載均衡(load banlace),本文不作深入討論。

注意:worker.myeclipseTomcat的設定不能簡單的填寫瀏覽器中可訪問的host和端口;
如果配置完畢後出現JK無法連接到tomcat的情況,就需要參考Tomcat配置文件:
${TOMCAT_HOME}/conf/server.xml 中,關於Connector的配置信息。

以我這裏的server.mxl配置爲例,其中配置了兩個Connector:
<Connector connectionTimeout="20000" port="88" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector connectionTimeout="20000" port="8009" protocol="AJP/1.3" redirectPort="8443"/>
不難看出,88端口的Connector只面向http協議,而真正面向JK的是使用AJP13協議的8009這個端口。
所以在上面JK的worker配置內容中,port應該是8009,而不是通過瀏覽器可訪問的88端口。


2.打開 ${APACHE_HOME}\conf\mywebsite_uriworkermap.properties 文件,寫入以下內容:

/jkstatus=status

#following types will NOT be proccessed by tomcat
!/*.gif=myeclipseTomcat
!/*.jpg=myeclipseTomcat
!/*.png=myeclipseTomcat
!/*.css=myeclipseTomcat
!/*.js=myeclipseTomcat
!/*.htm=myeclipseTomcat
!/*.html=myeclipseTomcat
!/*.swf=myeclipseTomcat

#other types will be given to tomcat
/*=myeclipseTomcat

在以上內容中:
/jkstatus=status :配置了一個URL,隨後訪問http://www.mywebsite.com/jkstatus就可以查看到JK的運行狀態。
!/*.gif=myeclipseTomcat :設定*.gif類型的文件直接由apache進行處理,不通過tomcat。(apache處理靜態內容的效率比tomcat高很多)
/*=myeclipseTomcat :其他類型的請求都有tomcat進行處理。

以上配置可參考資料:http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/index.html


MyEclipse的TOMCAT配置
MyEclipse安裝後,內置的Tomcat默認是enable的。可以在”Servers“選項頁看到。
內置Tomcat的默認根目錄在:${WORKSPACE}\.metadata\.me_tcat\
${WORKSPACE}就是MyEclipse默認的Workspace目錄。

打開${TOMCAT_HOME}\conf\server.xml文件,
在<Engine defaultHost="localhost" name="Catalina">小節中,加入以下內容:
<Host name="www.mywebsite.com" autoDeploy="true" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"></Host>
這是一個虛擬主機設定,通過域名訪問應用的時候tomcat會根據這裏的設定去尋找這個主機的config文件。
而上面設定的主機的config文件在約定的目錄:
${TOMCAT_HOME}\conf\Catalina\www.mywebsite.com\ROOT.xml

如果沒有這個文件,創建對應的目錄結構,然後在目錄下面創建這個文件,
打開www.mywebsite.com\ROOT.xml,加入以下內容:
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="F:/workspace/MyEclipse7/mywebsite"/>
這行內容指定了www.mywebsite.com域名指向的網站目錄,應該填寫應用的webRoot目錄(當前例子的webRoot目錄就是應用根目錄)
這部分的配置可參考資料:http://www.blogjava.net/sealyu/archive/2008/08/25/224326.html

配置完畢後,在MyEclipse的”Servers“選項頁重啓Tocmat服務器、重啓Apache服務器。

如果這個域名的dns還未生效,就在 WINDOWS\system32\drivers\etc\hosts 文件中增加一條映射:
127.0.0.1    www.mywebsite.com

重啓服務器後,如果服務器運行正常,就可以打開瀏覽器訪問 www.mywebsite.com 測試了。

在使用JK後,程序向客戶端寫入的某些Cookie值丟失?
雖然比較罕見,我就遇上了。
經過各種嘗試,發現是因爲我寫入的Cookie內容中含有換行符號,將換行符號替換成其他字符以後,Cookie工作正常,特此記錄備忘。

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