Tomcat 5 + Apache 2 + mod_jk 2 實現虛擬主機(轉)

Tomcat 5 實現了 servlet 2.4 和jsp2.0,在性能上有所提升,尤其是,對我們來說,實現了真正的中文支持,無需添加特別參數就可以直接顯示中文內容,讓java和jsp中文問題成爲歷史!

1.首先apache2 ,unix/linux下面就從源代碼編譯安裝,最重要的configure 參數是 --enalbe-modules="so" 其他根據自己需要安裝,windows下面直接安裝編譯好的二進制版本。具體安裝方法很多地方已經有介紹了,這裏不贅述,如有需要可以參考 http://httpd.apache.org 或者 chinaunix 的web服務器區精華,唯一一點需要提醒的是,要將 httpd.conf 裏面的
[code:1:141851c2a4]#AddDefaultCharset ISO-8859-1[/code:1:141851c2a4]
前面加#註銷掉,很多人提問爲什麼Apache2顯示中文亂碼,根源就在這裏,最簡單的方法就是加一個#就可以正常顯示中文了,無需設置什麼GB2312。

2.安裝jdk,tomcat的運行需要j2sdk支持,可以去 http://java.sun.com 下載。windows 的可以下載 offline installation 版本,大概50M左右,下載以後安裝,linux下建議下載 self-extract版本,下載完以後用 chmod +x j2sdk... 加上執行屬性,然後運行下載的文件,會出來一個許可協議,按幾次空格跳過幾頁後,輸入 yes 表示接受協議,然後程序會自動釋放,並建立一個子目錄 j2sdk1.4.2_04。

3.設置環境變量,java的運行需要設置一下環境變量,通常只要設置一個 JAVA_HOME,另外,把java的可執行程序放到path裏面去就可以了。在linux下運行
[code:1:141851c2a4]JAVA_HOME=/usr/local/j2sdk1.4.2-04;export $JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin[/code:1:141851c2a4]如果你需要所有的用戶都可以使用java,可以把這段代碼放到 /etc/profile 裏面去,這樣你每次登陸的時候就會自動把有關變量設置好了。
windows下面要在“系統屬性”裏面->“高級”->點“環境變量”按鈕,如果你希望所有用戶都能用,就建立在“系統變量”裏面,點“新建”按鈕,變量名是 “JAVA_HOME”,變量值是你安裝java的路徑,通常是 C:/j2sdk1.4.2-04 ,然後編輯path變量,在變量值最後加上;%JAVA_HOME%/bin

4.安裝tomcat,最簡單是下載binary版本,在linux下面,直接 tar -xzvf jakarta-tomcat-5.0.19 即可。windows下面,直接運行那個exe文件,就會自動安裝了。windows的安裝過程要求設置一個admin用戶和密碼,這個用戶可以在web上管理tomcat服務器的運行和安裝和解除web應用的,還可以創建其他管理用戶,權限很大,所以密碼要小心得取,如果是linux下面,沒有創建這個用戶,則需要到 jakarta-tomcat-5.0.19/conf 下面編輯 tomcat-users.xml 手工添加2個role和1個用戶,最簡單的例子文件如下:
[code:1:141851c2a4]<?xml version=1.0 encoding=utf-8?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="admin" password="administratorpassword123" roles="admin,manager"/>
</tomcat-users>[/code:1:141851c2a4]
啓動tomcat,tomcat/bin目錄下有startup.sh 用於Linux 和start.bat 用於windows,shutdown.sh 和 shutdown.bat 則用於關閉tomcat,當然,windows下面還有專門的圖形界面的啓動程序,其實效果都是一樣的。

當然,在linux下面也可以用jsvc啓動,並做成啓動腳本隨機器一起啓動。jsvc本來要從 http://jakarta.apache.org 下載 commons-daemon-1.0-Alpha ,不過tomcat 已經自己帶了一個了,在tomcat/bin目錄下有一個jsvc.tar.gz 解壓,編譯:
解壓 tar -xzvf jsvc.tar.gz 然後 cd jsvc-src 然後,運行
[code:1:141851c2a4]sh support/buildconf.sh
./configure
make[/code:1:141851c2a4]
(注意:tomcat-5.0.18版本帶的jsvc源代碼有一個低級錯誤--少一個分號,會導致編譯不成功,可以自己加上這個分號)

tomcat自己帶的jsvc-src/native目錄下還有兩個腳本 Tomcat.sh 和 Tomcat5.sh ,可以用作啓動和停止tomcat的腳本,我把Tomcat5.sh略作修改,文件如下:

[code:1:141851c2a4]#!/bin/sh
#
# Startup Script for Tomcat5
#
# chkconfig: 345 87 13
# description: Tomcat Daemon
# processname: jsvc
# pidfile: /var/run/jsvc.pid
# config:
#
# Source function library.
. /etc/rc.d/init.d/functions
#
prog=tomcat
#
# Small shell script to show how to start/stop Tomcat using jsvc
# If you want to have Tomcat running on port 80 please modify the server.xml
# file:
#
# <!-- Define a non-SSL HTTP/1.1 Connector on port 80 -->
# <Connector className="org.apache.catalina.connector.http.HttpConnector"
# port="80" minProcessors="5" maxProcessors="75"
# enableLookups="true" redirectPort="8443"
# acceptCount="10" debug="0" connectionTimeout="60000"/>
#
# You need a developement version of Tomcat (Apache Tomcat/4.1-dev)
#
# Adapt the following lines to your configuration

#設定自己的參數
JAVA_HOME=/usr/local/j2sdk1.4.2-04
CATALINA_HOME=/usr/local/jakarta-tomcat-5.0.19
DAEMON_HOME=$CATALINA_HOME/bin
#需要在系統中設定一個沒有權限的
#用戶來運行,這樣比較安全
TOMCAT_USER=tomcat5
TMP_DIR=/var/tmp
CATALINA_OPTS=
CLASSPATH=/
$JAVA_HOME/lib/tools.jar:/
$CATALINA_HOME/bin/commons-daemon.jar:/
$CATALINA_HOME/bin/bootstrap.jar

start(){
echo -n $"Starting $prog: "
#
# Start Tomcat
#
$DAEMON_HOME/jsvc-src/jsvc /
-user $TOMCAT_USER /
-home $JAVA_HOME /
-Dcatalina.home=$CATALINA_HOME /
-Djava.io.tmpdir=$TMP_DIR /
-outfile $CATALINA_HOME/logs/catalina.out /
-errfile &1 /
$CATALINA_OPTS /
-cp $CLASSPATH /
org.apache.catalina.startup.Bootstrap
#
# To get a verbose JVM
#-verbose /
# To get a debug of jsvc.
#-debug /
RETVAL=$?
[ $RETVAL = 0 ] && touch /var/lock/subsys/jsvc
[ $RETVAL = 0 ] && echo_success || echo_failure
echo
return $RETVAL
}
stop(){
echo -n $"Stopping $prog: "
#
# Stop Tomcat
#
PID=`cat /var/run/jsvc.pid`
kill $PID
RETVAL=$?
[ $RETVAL = 0 ] && rm /var/lock/subsys/jsvc
[ $RETVAL = 0 ] && echo_success || echo_failure
echo
return $RETVAL
}

case "$1" in
start)
start
;;

stop)
stop
;;

restart|reload)
stop
start
;;

*)
echo "Usage $0 start/stop"
exit 1;;
esac[/code:1:141851c2a4]
把這段代碼保存爲 /etc/rc.d/init.d/tomcat ,然後運行 [code:1:141851c2a4]chkconfig --add tomcat[/code:1:141851c2a4]即可把tomcat 添加爲系統服務自動隨系統啓動了。這個腳本會在runlevel 3/4/5三種模式自動啓動。注意這段腳本是爲tomcat5創建的,如果你用tomcat4,則需要在另一個tomcat.sh的基礎上修改。

5.編譯和設置mod_jk
windows版本的mod_jk可以直接從 jakarta.apache.org 下載binary版本,linux下只好下載源代碼編譯了。從 http://jakarta.apache.org 下載 jakarta-tomcat-connectors-jk2-src-current.tar.gz 解壓,然後 [code:1:141851c2a4]cd /jakarta-tomcat-connectors-jk2-2.0.2-src/jk/native2
./buildconf.sh[/code:1:141851c2a4]然後運行
[code:1:141851c2a4]./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-java-home=/usr/local/j2sdk1.4.2-04[/code:1:141851c2a4]
(具體路徑按照你實際的調整)
運行
[code:1:141851c2a4]make jk2-build-apxs
cd server/apache2
make -f Makefile.apxs install[/code:1:141851c2a4]
其實這個軟件包本來有ant的配置文件,用ant編譯可能會簡單一些,但是要另外裝ant,而且裏面有些模塊不是ant本身native的功能,還要爲ant加裝相應的功能模塊,所以這裏就略過,下次有時間再發一個ant的應用。

這樣,你的mod_jk總算是裝好了,現在開始進入配置階段,其實,配置很簡單了

6.設置虛擬主機
比如,我現在有虛擬主機 vhosts.vicp.net 希望把jsp和servlet都轉到tomcat去,而其他的文件比如html頁面,圖片等等仍然用apache解析。
Tomcat設置:
修改 tomcat/conf/server.xml,在 <Engine></Engine>裏面再增加一個<host/>,
[code:1:141851c2a4]<Host name="vhosts.vicp.net" debug="0"
appBase="/opt/jakarta-tomcat-4.1.12-LE-jdk14/webapps/struts-example"
unpackWARs="true" autoDeploy="true">
<Alias>localhost</Alias>
<Alias>www</Alias>
<Alias>10.0.0.10</Alias>
<Context path="" docBase="" debug="1"/>
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="vhost.vicp.net_access_log." suffix=".txt"
pattern="common" resolveHosts="false"/>
<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="home_log_" suffix="_app_log.txt"
timestamp="true"/>
</Host>[/code:1:141851c2a4]
調整裏面的參數和設置使之適合你的環境,當然,如果你還有其他的<host/>添加在後面。

在 /usr/local/apache/conf 下面創建一個workers2.properties,內容如下:

[code:1:141851c2a4]#---- worker2.properties

[logger.apache2]
level=DEBUG

# Shared memory handling. Needs to be set.
[shm]
file=/usr/local/apache2/logs/shm.file
size=1048576

# Example socket channel, explicitly set port and host.
[channel.socket:localhost:8009]
tomcatId=localhost:8009
port=8009
host=127.0.0.1

# define the worker
[ajp13:localhost:8009]
channel=channel.socket:localhost:8009

#[status:status]

# Uri mapping

#[uri:/jkstatus/*]
#group=status:status

#[uri:/jsp-examples/*]
#group=ajp13:localhost:8009

#[uri:/servlets-examples/*]
#group=ajp13:localhost:8009

#[uri:/javaapp/*]
#group=ajp13:localhost:8009

#[uri:www.home.net/*.jsp]
#worker=ajp13:localhost:8009

#[uri:10.0.0.10/*]
#worker=ajp13:localhost:8009

#---- end of workers2.properties[/code:1:141851c2a4]

當然,你可以刪除其中的註釋符使其中的uri和worker的配置生效,我現在不用這種方式配置是因爲找到一個更好的方法:在httpd.conf裏面配置:

把下面這段放到VirtualHost之前,可以從全局避免用戶用apache訪問WEB-INF目錄。
[code:1:141851c2a4]<Directory ~ "/WEB-INF/">
Order allow,deny
Deny from all
</Directory>[/code:1:141851c2a4]

典型的VirtualHost配置樣本

[code:1:141851c2a4]<VirtualHost _default_:80>
ServerName vhost.vicp.net
DocumentRoot /home/webapp/public_html/
DirectoryIndex index.htm index.html default.htm index.php index.jsp
<Location ~ "/*.jsp|/*/servlet/*">
JkUriSet worker ajp13:localhost:8009
</Location>
ErrorLog logs/vhosts.vicp.net-err_log
CustomLog logs/vhosts.vicp.net-acc_log common
</VirtualHost>[/code:1:141851c2a4]
這樣就可以爲每個不同的虛擬主機分別指定使用或者不使用jsp功能。

好了,可以開始開發和使用你的web應用了!

參考文獻:
1. http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jk2/jk2/vhosthowto.html
2. http://bbs.chinaunix.net/forum/6/20040214/259794.html
3. http://chinaunix.net/jh/6/263220.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章