2009/08/26

mod_jk (Apache + Tomcat) 在 Ubuntu 下的設定方式

因為組員只會寫JSP,所以原本的Apache以外勢必還要再架設一個跑JSP的服務,我就想到了 Tomcat。因為 Ubuntu 的套件庫很多已經編譯好的玩意,連相依性都幫我考慮好了,很方便。所以我就打開 Synaptic 套件管理工具來找尋 Tomcat 安裝。

安裝的是 Tomcat6,連帶安裝了 OpenJDK 等 Java 函式庫。我突然看到還有 mod_jk 可以安裝,說明是說可以把 Tomcat 跟 Apache 連接起來,透過 Apache 就可以執行 JSP (說穿了就是扮演代理角色)。因為 Apache 的效能比 Tomcat 還要好,所以透過 mod_jk 不但可以除去網址老是有 8080 Port 的不便,也可以獲得 Apache 的代理效能。

全部利用 Synaptic 套件管理工具安裝完後,mod_jk還需要手動設定,而且還滿多地方需要手動設定不然按照預設值是跑不起來的地方,不知道是不是版本的關係。我使用 Ubuntu 9.04 Server 版。

首先,要先去修改 /etc/libapache2-mod-jk/workers.properties 這個檔案。這個檔案是 mod_jk 使用,作為 Apache 跟 Tomcat 溝通的工人 (Worker)。使用 vi 打開後主要修改幾處地方:

workers.tomcat_home=/usr/share/tomcat6
這個值預設是安裝 Tomcat 5 的位置,因為我是安裝新版的 6 版,不修改一定不能用。改成 /usr/share/tomcat6 就可以順利指定 Tomcat6 的目錄。

workers.java_home=/usr/lib/jvm/default-java
這個值預設是 JavaVM 沒錯,但是現在已經有開放原始碼的 OpenJRE/OpenJDK,如果你也是安裝了 OpenJRE,那記得改一下位置: /usr/lib/jvm/default-java,這個路徑是一個 Symbolic Link,不知道其他版本是不是也有這個 link。


接下來請到 /etc/apache2/mods-available,打 ls 查看一下可以發現有 jk.load,這是載入 mod_jk 模組的設定檔,但卻沒看到對應的 jk.conf (照理說是 mod_jk 的設定),查了一下發現在 /usr/share/doc/libapache2-mod-jk 目錄下有 httpd_example_apache2.conf 範例設定檔,將這個檔案 cp 到 /etc/apache2/mods-available 並改名為 jk.conf 以方便作業。接著,打開檔案編輯。

這個檔案預設上是差不多可以用了,但是還是需要修改:

加上一行 JkMountCopy All
加這行的用意是因為預設 mod_jk 只會運作在 Apache 主網站,其他的虛擬網站 (VirtualHost) 設定不會套用。但是 Ubuntu 預設的結構是,主網站也是使用虛擬網站設定,並沒有主網站設定,所以按照預設值 mod_jk 會無法對應到正確的檔案 (這可以從 log 看的出來)。而這行就是將設定複製到全部的虛擬網站。

因為我的網站設定只有 80 port 跟 443 port,而且網站內容一模一樣,這樣的設定沒有什麼問題。但是如果你的虛擬網站很複雜,各自有不同內容,那就請只在想要連接到 Tomcat 的網站設定檔內修改加入一行 JkMountCopy On,讓你指定的虛擬網站能夠正常運作 mod_jk 設定。


結束編輯後,我們還要建立一個 Symbolic Link 讓 Apache 讀取。到 /etc/apache2/mods-enabled 執行以下指令:

ln -s ../mods-available/jk.conf jk.conf


最後重新啟動 Apache (執行 /etc/init.d/apache2 restart 指令),就大功告成了。

結果就是 http://127.0.0.1/*.jsp 會自動對應到 http://127.0.0.1:8080/*.jsp,如果你想要更特別的設定,打開 /etc/apache2/mods-available/jk.conf 就可以自由新增。

JkMount /*.jsp ajp13_worker
JkMount /*/servlet/ ajp13_worker

這是預設的設定,用意就是將符合的條件送給 Tomcat 處理。所以我打 /test.jsp 就會送到 :8080/test.jsp

沒有留言:

張貼留言