Apache和Tomcat整合問題
我看了些文章,看得有些迷糊。
對於Apache和Tomcat整合,有說用jk的,有說用jk2的,還有說用apache內置proxy_ajp的。
我現在的環境如下:
jdk-6u2-linux-i586.rpm
apache-tomcat-6.0.14.tar.gz
httpd-2.2.6.tar.gz
應該用哪個做整合?
謝謝
《解決方案》
Who can help me ?
Thanks!
《解決方案》
也許這個對你有用:
利用mod_jk1.2集成APACHE+JBOSS
1. 下載所需的安裝包:
httpd-2.0.46.tar.gz : http://httpd.apache.org/download.cgi
jdk-1_5_0_03-linux-i586-rpm.bin:http://java.sun.com/j2se/1.5.0/download.jsp
jakarta-tomcat-connectors-1.2.10-src.tar.gz: http://jakarta.apache.org/site/downloads/downloads_tomcat.html
2. 安裝jdk1.5,由於jboss4.x集成的是tomcat5.5,故需要安裝jdk1.5以上的版本。
l 卸載原系統已經安裝的jdk1.4: rpm -e j2sdk-1.4.2_07-fcs
l 安裝jdk1.5:chmod +x jdk-1_5_0_03-linux-i586-rpm.bin
執行./jdk-1_5_0_03-linux-i586-rpm.bin
Do you agree to the above license terms?
接受許可就可以得到一個rpm包,系統會自動安裝rmp包
l 設置jboss和apache需要的環境變數:
vi /etc/profile在path路徑前添加JAVA的bin目錄:
if [ `id -u` = 0 ]; then
pathmunge /usr/java/jdk1.5.0_03/bin
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi
並在該文件的最後添加:export JAVA_HOME=/usr/java/jdk1.5.0_03
退出系統並重新登錄,使環境變數生效
3.安裝apache:安裝apache無需指定配置參數,默認安裝就可以,但是最好指定一下apache的主目錄:
tar zxvf httpd-2.0.46.tar.gz
cd httpd-2.0.46
./configure C-prefix=/usr/local/apache
make
make install以下用APACHE_HOME=/usr/local/apache
修改APACHE_HOME/conf/httpd.conf中的ServerName為你機器的ip地址。啟動apache:$APACHE_HOME/bin/apachectl start
4.安裝mod_jk1.2.x(這個文件一定要用自己編譯生成的,如果直接從apache的網站上down,啟動apache的時候會報如下錯誤:segement fault:$HTTPD -k $ARGV,無法正常啟動apache)
tar zxvf jakarta-tomcat-connectors-1.2.10-src.tar.gz
cd jakarta-tomcat-connectors-1.2.10-src
cd jk/native
./configure -Cwith-apxs=/usr/local/apache/bin/apxs -Cwith-java-home=${JAVA_HOME} --with-java-platform=2 Cenable-jni
make
編譯后將在apache-2.0子目錄下生成mod_jk.so文件。這就是我們需要的連接apache和jboss的modules文件。將該文件拷貝到apache的modules目錄下:
cd apache-2.0
cp mod_jk.so /usr/local/apache/modules/
5.配置apache:
cd /usr/local/apache/conf
cp httpd.conf httpd.conf.bak(備份一下apache的配置文件)
在httpd.conf文件的末尾添加如下內容:
#Include mod_jk Configuration file
Include conf/mod-jk.conf
6.編輯mod-jk模塊的配置文件:在APACHE_HOME/conf下創建文件mod-jk.conf並添加如下內容:
#Load mod_jk module
#Specify the filename of the mod_jk lib
LoadModule jk_module modules/mod_jk.so
# Where to find workers.properties
JkWorkersFile conf/workers.properties
# Where to put jk logs
JkLogFile logs/mod_jk.log
# Set the jk log level
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# JkOptions indicates to send SSK KEY SIZE
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat
JkRequestLogFormat "%w %V %T"
# Mount your applications
JkMount /application/* loadbalancer
# You can use external file for mount points.
# It will be checked for updates each 60 seconds.
# The format of the file is: /url=worker
# /examples/*=loadbalancer
JkMountFile conf/uriworkermap.properties
# Add shared memory.
# This directive is present with 1.2.10 and
# later versions of mod_jk, and is needed for
# for load balancing to work properly
JkShmFile logs/jk.shm
# Add jkstatus for managing runtime data
<Location /jkstatus/>
JkMount status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
mod_jk模塊負責將apache的請求發送到jboss的應用中。配置了mod-jk.conf后,通過apache的配置文件apache就可以將請求轉發到jboss了。下面配置轉發機器的信息:
7.配置workers的屬性:
在APACHE_HOME/conf目錄下添加:workers.properties,並添加如下內容:
#Define list of workers that will be used for
#mapping requests;
worker.list=loadbalancer,status
#Define nodes.如果有多個節點(如jboss集群,可以在下面繼續添加nodex)
worker.node1.port=8009
worker.node1.host=192.168.1.106
worker.node1.type=ajp13
worker.node1.lbfactor=1
worker.node1.cachesize=10
#Define loadbalancer behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=192.168.1.106
worker.loadbalancer.sticky_session=1
worker.loadbalancer.local_worker_only=1
worker.list=loadbalancer
#worker for mapping loadbalance status
worker.status.type=status
8.創建URI映射文件:
在APACHE_HOME/conf下創建uriworkermap.properties
這個文件包含apache轉發給jboss的URL 映射。格式應該是:
/url=worker_name。worker_name就是上一個文件workers.properties中的
worker.list指明的
作為一個例子在uriworkermap.properties中添加如下內容:
#mount the Servlet context to the ajp13 worker
/jmx-console=loadbalancer
/jmx-console/*=loadbalancer
利用這個文件mod_jk將把轉發請求到tomcat的jmx-console
9.重新啟動APACHE;
10.配置JBOSS中集成的tomcat
根據worker.properties中指定的node名。配置該機器上的jboss配置文件server.xml
cd $JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar
編輯server.xml:
在<Engine…>選項中添加一個屬性jvmRoute:
<Engine name="jboss.web" defaultHost="localhost" jvmRoute=」192.168.1.106」>
……………………………………
</Engine>
jvmRoute屬性必須與workers.properties中指定的節點名匹配。
最後把tomcat的session cookies 也添加jmvRoute值,這樣mod_jk就可以轉發客戶端的請求了:編輯文件
$JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar/META-INF/jboss-server.xml
找到name為UseJK的<attribute>元素,把該元素的值設為true即:
把<attribute name=」UseJK」>false</attribute>改為
<attribute name=」UseJK」>true</attribute>
11.重新啟動JBOSS伺服器:
cd $JBOSS_HOME/bin
./shutdown.sh CS
./run.sh &
12.通過瀏覽器訪問:http://192.168.1.106/jmx-console/就可以看到jboss的jmx-console了。這說明jboss已經可以通過apache訪問了。
注意:修改各個配置文件的時候最好將配置文件做一個備份
注意jboss默認的埠是8080開始測試jboss時要放開防火牆的8080埠
可以利用測試頁訪問jsp文件:
<%@ page import="java.util.*,java.sql.*,java.text.*" contentType="text/html;charset=gb2312" %>
<%
out.println("test page");
%>
利用mod_jk1.2集成APACHE+JBOSS
1. 下載所需的安裝包:
httpd-2.0.46.tar.gz : http://httpd.apache.org/download.cgi
jdk-1_5_0_03-linux-i586-rpm.bin:http://java.sun.com/j2se/1.5.0/download.jsp
jakarta-tomcat-connectors-1.2.10-src.tar.gz: http://jakarta.apache.org/site/downloads/downloads_tomcat.html
2. 安裝jdk1.5,由於jboss4.x集成的是tomcat5.5,故需要安裝jdk1.5以上的版本。
l 卸載原系統已經安裝的jdk1.4: rpm -e j2sdk-1.4.2_07-fcs
l 安裝jdk1.5:chmod +x jdk-1_5_0_03-linux-i586-rpm.bin
執行./jdk-1_5_0_03-linux-i586-rpm.bin
Do you agree to the above license terms?
接受許可就可以得到一個rpm包,系統會自動安裝rmp包
l 設置jboss和apache需要的環境變數:
vi /etc/profile在path路徑前添加JAVA的bin目錄:
if [ `id -u` = 0 ]; then
pathmunge /usr/java/jdk1.5.0_03/bin
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi
並在該文件的最後添加:export JAVA_HOME=/usr/java/jdk1.5.0_03
退出系統並重新登錄,使環境變數生效
3.安裝apache:安裝apache無需指定配置參數,默認安裝就可以,但是最好指定一下apache的主目錄:
tar zxvf httpd-2.0.46.tar.gz
cd httpd-2.0.46
./configure C-prefix=/usr/local/apache
make
make install以下用APACHE_HOME=/usr/local/apache
修改APACHE_HOME/conf/httpd.conf中的ServerName為你機器的ip地址。啟動apache:$APACHE_HOME/bin/apachectl start
4.安裝mod_jk1.2.x(這個文件一定要用自己編譯生成的,如果直接從apache的網站上down,啟動apache的時候會報如下錯誤:segement fault:$HTTPD -k $ARGV,無法正常啟動apache)
tar zxvf jakarta-tomcat-connectors-1.2.10-src.tar.gz
cd jakarta-tomcat-connectors-1.2.10-src
cd jk/native
./configure -Cwith-apxs=/usr/local/apache/bin/apxs -Cwith-java-home=${JAVA_HOME} --with-java-platform=2 Cenable-jni
make
編譯后將在apache-2.0子目錄下生成mod_jk.so文件。這就是我們需要的連接apache和jboss的modules文件。將該文件拷貝到apache的modules目錄下:
cd apache-2.0
cp mod_jk.so /usr/local/apache/modules/
5.配置apache:
cd /usr/local/apache/conf
cp httpd.conf httpd.conf.bak(備份一下apache的配置文件)
在httpd.conf文件的末尾添加如下內容:
#Include mod_jk Configuration file
Include conf/mod-jk.conf
6.編輯mod-jk模塊的配置文件:在APACHE_HOME/conf下創建文件mod-jk.conf並添加如下內容:
#Load mod_jk module
#Specify the filename of the mod_jk lib
LoadModule jk_module modules/mod_jk.so
# Where to find workers.properties
JkWorkersFile conf/workers.properties
# Where to put jk logs
JkLogFile logs/mod_jk.log
# Set the jk log level
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# JkOptions indicates to send SSK KEY SIZE
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat
JkRequestLogFormat "%w %V %T"
# Mount your applications
JkMount /application/* loadbalancer
# You can use external file for mount points.
# It will be checked for updates each 60 seconds.
# The format of the file is: /url=worker
# /examples/*=loadbalancer
JkMountFile conf/uriworkermap.properties
# Add shared memory.
# This directive is present with 1.2.10 and
# later versions of mod_jk, and is needed for
# for load balancing to work properly
JkShmFile logs/jk.shm
# Add jkstatus for managing runtime data
<Location /jkstatus/>
JkMount status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
mod_jk模塊負責將apache的請求發送到jboss的應用中。配置了mod-jk.conf后,通過apache的配置文件apache就可以將請求轉發到jboss了。下面配置轉發機器的信息:
7.配置workers的屬性:
在APACHE_HOME/conf目錄下添加:workers.properties,並添加如下內容:
#Define list of workers that will be used for
#mapping requests;
worker.list=loadbalancer,status
#Define nodes.如果有多個節點(如jboss集群,可以在下面繼續添加nodex)
worker.node1.port=8009
worker.node1.host=192.168.1.106
worker.node1.type=ajp13
worker.node1.lbfactor=1
worker.node1.cachesize=10
#Define loadbalancer behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=192.168.1.106
worker.loadbalancer.sticky_session=1
worker.loadbalancer.local_worker_only=1
worker.list=loadbalancer
#worker for mapping loadbalance status
worker.status.type=status
8.創建URI映射文件:
在APACHE_HOME/conf下創建uriworkermap.properties
這個文件包含apache轉發給jboss的URL 映射。格式應該是:
/url=worker_name。worker_name就是上一個文件workers.properties中的
worker.list指明的
作為一個例子在uriworkermap.properties中添加如下內容:
#mount the Servlet context to the ajp13 worker
/jmx-console=loadbalancer
/jmx-console/*=loadbalancer
利用這個文件mod_jk將把轉發請求到tomcat的jmx-console
9.重新啟動APACHE;
10.配置JBOSS中集成的tomcat
根據worker.properties中指定的node名。配置該機器上的jboss配置文件server.xml
cd $JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar
編輯server.xml:
在<Engine…>選項中添加一個屬性jvmRoute:
<Engine name="jboss.web" defaultHost="localhost" jvmRoute=」192.168.1.106」>
……………………………………
</Engine>
jvmRoute屬性必須與workers.properties中指定的節點名匹配。
最後把tomcat的session cookies 也添加jmvRoute值,這樣mod_jk就可以轉發客戶端的請求了:編輯文件
$JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar/META-INF/jboss-server.xml
找到name為UseJK的<attribute>元素,把該元素的值設為true即:
把<attribute name=」UseJK」>false</attribute>改為
<attribute name=」UseJK」>true</attribute>
11.重新啟動JBOSS伺服器:
cd $JBOSS_HOME/bin
./shutdown.sh CS
./run.sh &
12.通過瀏覽器訪問:http://192.168.1.106/jmx-console/就可以看到jboss的jmx-console了。這說明jboss已經可以通過apache訪問了。
注意:修改各個配置文件的時候最好將配置文件做一個備份
注意jboss默認的埠是8080開始測試jboss時要放開防火牆的8080埠
可以利用測試頁訪問jsp文件:
<%@ page import="java.util.*,java.sql.*,java.text.*" contentType="text/html;charset=gb2312" %>
<%
out.println("test page");
%>
《解決方案》
又是一手好資料啊,謝謝樓上的。
可是我的問題還是不知道答案啊!:(
《解決方案》
樓主為什麼不都先試一下呢。
看看哪個合適你。
《解決方案》
謝謝樓上的回答!
自己動手試試是肯定的。這三種方法都能完成Apache和Tomcat的整合,但是我是第一次碰這東西,誰好誰差我很難判斷出來啊,還有,要看出它們之間的好壞肯定要一段時間吧,可做項目的時間是死的,總不見得跟項目經理說給我幾個月試試這三種整合方法吧。
呵呵!
《解決方案》
是的,都可以達到目的。
那目前你考慮的到底是什麼的呢?既然都能達到目的,那就選一個不就可以了嗎?
Apache 和 Tomcat 的整合會對你的項目產生任何實質的影響嗎?
《解決方案》
選一個最合適應該比選一個一般般的運行效率高吧,就是整合效果應該更好嘍!
《解決方案》
罈子里有人告訴我,JK發展的比較成熟,JK2前景不容樂觀,Proxy_Ajp新出來。所以我還是選JK吧,呵呵。
《解決方案》
apache與tomcat目前有3種整合方法:
http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/index.html
關於APACHE與TOMCAT整合的相關資料:
http://www.google.cn/search?complete=1&hl=zh-CN&newwindow=1&q=apache%2Btomcat%E6%95%B4%E5%90%88&btnG=Google+%E6%90%9C%E7%B4%A2&meta=