2009-02-25

mod_jk---阿帕契與湯姆貓的結合器

事前準備:
1)apache-2.2.x
2)tomcat5
3)java-jdk、jre
==========
以上除了java是我上昇陽的網站抓下來安裝的之外嘛,其他我都是懶懶的用yum的…
注意,在yum裝湯姆貓時,請用yum -y install tomcat5-*的方式來裝…當然,是使用CentOS的人才要這樣做啦,因為在COS上的湯姆貓,他的安裝資料都會拆開成像tomcat5-webapps、tomcat5-lib等之類的,沒裝的話…也不好跟網路上的測試方式來進行,所以就全裝了吧。
==========
有幾個重點網頁:
a)http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.27/x86_64/
b)http://www.howtoforge.com/apache2_tomcat5_mod_jk
a是為了這次的重點mod_jk,這一個可以把apache與tomcat做結合的module,因為我是用64位元的COS,所以,下載64位元的版本
b是為了做「結合」的重點的教學網,他是國外全英文的…雖然我也討厭英文,但沒辦法,所謂的技術文章還是國外寫的比較精闢…
==========
前提:幹嘛要做apache與tomcat的結合?
據網路上要做這事的人是說:「tomcat當web-base,在效能上比較差,而且也只有servlet與jsp的網頁才會用到。」
不過我個人的原因是:「因為突然自己想到可不可以結合使用,然後再網路上找到mod_jk,所以不用白不用。」
==========
步驟如下:

一、下載mod_jk.so,在a)下載的網頁的下方有寫
* mod_jk-1.2.27-httpd-2.2.6.so is for Apache 2.2.x and works with Apache 2.2.6 and later.
* mod_jk-1.2.27-httpd-2.0.61.so is for Apache 2.0.x and works with Apache 2.0.61 and later.
* mod_jk-1.2.27-httpd-1.3.39-eapi.so is for Apache 1.3.x with EAPI extensions and works with Apache 1.3.39 and later.
Any SSL enabled Apache 1.3 will include the EAPI extensions.
所以,我是用apache 2.2.3,符合第一個mod_jk-1.2.27-httpd-2.2.6.so,所以,下載下來存到apache的modules目錄下(我的路徑是/etc/httpd/modules)

二、編寫workers.properties,我在用的內容如下
workers.java_home=/opt/java
workers.tomcat_home=/opt/tomcat
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1

worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=ajp13
worker.inprocess.type=jni
worker.inprocess.class_path=$(workers.tomcat_home)/lib
上面有一些並不一定要設定,只是因為我錯了很多次,想說就照著b)的網站做著先…我的重點只在可以正常啟動,要不然,設錯了很容易就被lock file......上述的東西可以存成workers.properties,我是存在apache/conf下…因為我比較好找

三、修改tomcat的server.xml
server.xml位於tomcat/conf下,此檔依b)的教法,只需在server.xml的檔尾的部份找到,在這之前加入所謂的tomcat虛擬路徑的設定即可,不過,我會建議留著server.xml本來的xxxxxx不要動,再多設定一個出來在server.xml檔尾的之前用…該怎麼加呢,請看下面
<!-- 設定開始 -->
<host name="xxx.xxx.xxx.xxx(你可以用domain-name or ip)" appbase="/opt/tomcat/webapps(你主要jsp網頁的位置)" unpackwars="true" autodeploy="true">
<context path="(虛擬根路徑xxx.xxx.xxx.xxx)" docbase="/opt/tomcat/webapps/ROOT" debug="0" reloadable="true" />
...
...(看你虛擬路徑想怎麼增,就是<context.....>多幾個,path記得要從根/開始,docBase是你機器的實際目錄,邏輯觀念和iis差不多)
<valve classname="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="web1_access_log." suffix=".txt" pattern="common" resolvehosts="false" />
<listener classname="org.apache.jk.config.ApacheConfig" modjk="apache/modules/mod_jk.so(就是一在講的東東)" workersconfig="apache/workers.properties(這裡就是二在講的東東)" /></host>


四、編寫mod_jk.conf
網路上很多人都說這個mod_jk.conf自己編寫就行了…不過,我個人認為,不需要。因為在「三」的動作做完後,啟動tomcat,檢查看看tomcat是否正常啟動,如果沒有,那就是你server.xml有東西設錯;如果正常啟動,你可以發現在tomcat/conf中,會出現一個auto,在裡面放著mod_jk.conf,這個就是tomcat5在設定過server.xml之後,會自動生成的東西,而且以後只要改server.xml,然後重啟tomcat,則tomcat/conf/auto/mod_jk.conf也就會被改寫,非常容易。自己也可以檢查看看mod_jk.conf的內容是否非你所想的設定,因為這個mod_jk.conf等一下要進入apache的httpd.conf來載入…mod_jk.conf主要做的只有幾件事
.讓apache載入mod_jk module
.設定給apache看的虛擬路徑
.告知apache把路徑下的東西經mod_jk.so送給tomcat來執行
.log的記錄
熟apache-config的應該懂,不熟的人,就去弄熟吧…一知未解即不懂,只跟著人走是沒用的。

五、改寫apapche/conf/httpd.conf
這個比較簡單,就是在httpd.conf中,找到會有一大段都在做LoadModule的動作的,就跟著後面加上以下的東西
LoadModule jk_module modules/mod_jk.so
Include "/opt/tomcat/conf/auto/mod_jk.conf"
=========
主要這個mod_jk會做的動作就如以上般的精簡
最主要看不懂的,還是上b)的網頁看看會比較好,因為我本來弄了一個星期,不管怎麼弄,tomcat就是無因的進入lock file,害我把tomcat給yum remove然後install了無數次…最後在網路上google時發現一個讓我動容的帖子,發問的人一樣也是問mod_jk該怎麼設定…其中有一個回帖的人只留一句「不要再聽網路上的人瞎扯,上http://www.howtoforge.com/apache2_tomcat5_mod_jk看著做就對了…」,所以我就連進去看了,果然,這個howtoforge的東東實在好用…不僅僅是how to set tomcat for mod_jk,其他的howto也是一堆,雖然都是英文,但,好用的東西就是好用,就當做練練英文能力吧。

------
最近要接計畫來寫一個log-server來收取網路設備的資料…

沒有留言: