ChinaUnix-Web服務(wù)器討論區(qū)精華帖
Tomcat 5 + Apache 2 + mod_jk 2 實(shí)現(xiàn)虛擬主機(jī)
http://www.chinaunix.net 作者:perryhg 發(fā)表于:2004-03-17 08:58:21
Tomcat 5 實(shí)現(xiàn)了 servlet 2.4 和jsp2.0,在性能上有所提升,尤其是,對(duì)我們來說,實(shí)現(xiàn)了真正的中文支持,無需添加特別參數(shù)就可以直接顯示中文內(nèi)容,讓java和jsp中文問題成為歷史!
1.首先apache2 ,unix/linux下面就從源代碼編譯安裝,最重要的configure 參數(shù)是 --enalbe-modules="so" 其他根據(jù)自己需要安裝,windows下面直接安裝編譯好的二進(jìn)制版本。具體安裝方法很多地方已經(jīng)有介紹了,這里不贅述,如有需要可以參考 http://httpd.apache.org 或者 chinaunix 的web服務(wù)器區(qū)精華,唯一一點(diǎn)需要提醒的是,要將 httpd.conf 里面的
[code:1:141851c2a4]#AddDefaultCharset ISO-8859-1[/code:1:141851c2a4]
前面加#注銷掉,很多人提問為什么Apache2顯示中文亂碼,根源就在這里,最簡單的方法就是加一個(gè)#就可以正常顯示中文了,無需設(shè)置什么GB2312。
2.安裝jdk,tomcat的運(yùn)行需要j2sdk支持,可以去 http://java.sun.com 下載。windows 的可以下載 offline installation 版本,大概50M左右,下載以后安裝,linux下建議下載 self-extract版本,下載完以后用 chmod +x j2sdk... 加上執(zhí)行屬性,然后運(yùn)行下載的文件,會(huì)出來一個(gè)許可協(xié)議,按幾次空格跳過幾頁后,輸入 yes 表示接受協(xié)議,然后程序會(huì)自動(dòng)釋放,并建立一個(gè)子目錄 j2sdk1.4.2_04。
3.設(shè)置環(huán)境變量,java的運(yùn)行需要設(shè)置一下環(huán)境變量,通常只要設(shè)置一個(gè) JAVA_HOME,另外,把java的可執(zhí)行程序放到path里面去就可以了。在linux下運(yùn)行
[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 里面去,這樣你每次登陸的時(shí)候就會(huì)自動(dòng)把有關(guān)變量設(shè)置好了。
windows下面要在“系統(tǒng)屬性”里面->“高級(jí)”->點(diǎn)“環(huán)境變量”按鈕,如果你希望所有用戶都能用,就建立在“系統(tǒng)變量”里面,點(diǎn)“新建”按鈕,變量名是 “JAVA_HOME”,變量值是你安裝java的路徑,通常是 C:\j2sdk1.4.2-04 ,然后編輯path變量,在變量值最后加上;%JAVA_HOME%\bin
4.安裝tomcat,最簡單是下載binary版本,在linux下面,直接 tar -xzvf jakarta-tomcat-5.0.19 即可。windows下面,直接運(yùn)行那個(gè)exe文件,就會(huì)自動(dòng)安裝了。windows的安裝過程要求設(shè)置一個(gè)admin用戶和密碼,這個(gè)用戶可以在web上管理tomcat服務(wù)器的運(yùn)行和安裝和解除web應(yīng)用的,還可以創(chuàng)建其他管理用戶,權(quán)限很大,所以密碼要小心得取,如果是linux下面,沒有創(chuàng)建這個(gè)用戶,則需要到 jakarta-tomcat-5.0.19/conf 下面編輯 tomcat-users.xml 手工添加2個(gè)role和1個(gè)用戶,最簡單的例子文件如下:
[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]
啟動(dòng)tomcat,tomcat/bin目錄下有startup.sh 用于Linux 和start.bat 用于windows,shutdown.sh 和 shutdown.bat 則用于關(guān)閉tomcat,當(dāng)然,windows下面還有專門的圖形界面的啟動(dòng)程序,其實(shí)效果都是一樣的。
當(dāng)然,在linux下面也可以用jsvc啟動(dòng),并做成啟動(dòng)腳本隨機(jī)器一起啟動(dòng)。jsvc本來要從 http://jakarta.apache.org 下載 commons-daemon-1.0-Alpha ,不過tomcat 已經(jīng)自己帶了一個(gè)了,在tomcat/bin目錄下有一個(gè)jsvc.tar.gz 解壓,編譯:
解壓 tar -xzvf jsvc.tar.gz 然后 cd jsvc-src 然后,運(yùn)行
[code:1:141851c2a4]sh support/buildconf.sh
./configure
make[/code:1:141851c2a4]
(注意:tomcat-5.0.18版本帶的jsvc源代碼有一個(gè)低級(jí)錯(cuò)誤--少一個(gè)分號(hào),會(huì)導(dǎo)致編譯不成功,可以自己加上這個(gè)分號(hào))
tomcat自己帶的jsvc-src/native目錄下還有兩個(gè)腳本 Tomcat.sh 和 Tomcat5.sh ,可以用作啟動(dòng)和停止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
#設(shè)定自己的參數(shù)
JAVA_HOME=/usr/local/j2sdk1.4.2-04
CATALINA_HOME=/usr/local/jakarta-tomcat-5.0.19
DAEMON_HOME=$CATALINA_HOME/bin
#需要在系統(tǒng)中設(shè)定一個(gè)沒有權(quán)限的
#用戶來運(yùn)行,這樣比較安全
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 ,然后運(yùn)行 [code:1:141851c2a4]chkconfig --add tomcat[/code:1:141851c2a4]即可把tomcat 添加為系統(tǒng)服務(wù)自動(dòng)隨系統(tǒng)啟動(dòng)了。這個(gè)腳本會(huì)在runlevel 3/4/5三種模式自動(dòng)啟動(dòng)。注意這段腳本是為tomcat5創(chuàng)建的,如果你用tomcat4,則需要在另一個(gè)tomcat.sh的基礎(chǔ)上修改。
5.編譯和設(shè)置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]然后運(yùn)行
[code:1:141851c2a4]./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-java-home=/usr/local/j2sdk1.4.2-04[/code:1:141851c2a4]
(具體路徑按照你實(shí)際的調(diào)整)
運(yùn)行
[code:1:141851c2a4]make jk2-build-apxs
cd server/apache2
make -f Makefile.apxs install[/code:1:141851c2a4]
其實(shí)這個(gè)軟件包本來有ant的配置文件,用ant編譯可能會(huì)簡單一些,但是要另外裝ant,而且里面有些模塊不是ant本身native的功能,還要為ant加裝相應(yīng)的功能模塊,所以這里就略過,下次有時(shí)間再發(fā)一個(gè)ant的應(yīng)用。
這樣,你的mod_jk總算是裝好了,現(xiàn)在開始進(jìn)入配置階段,其實(shí),配置很簡單了
6.設(shè)置虛擬主機(jī)
比如,我現(xiàn)在有虛擬主機(jī) vhosts.vicp.net 希望把jsp和servlet都轉(zhuǎn)到tomcat去,而其他的文件比如html頁面,圖片等等仍然用apache解析。
Tomcat設(shè)置:
修改 tomcat/conf/server.xml,在 <Engine></Engine>里面再增加一個(gè)<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]
調(diào)整里面的參數(shù)和設(shè)置使之適合你的環(huán)境,當(dāng)然,如果你還有其他的<host/>添加在后面。
在 /usr/local/apache/conf 下面創(chuàng)建一個(gè)workers2.properties,內(nèi)容如下:
[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]
當(dāng)然,你可以刪除其中的注釋符使其中的uri和worker的配置生效,我現(xiàn)在不用這種方式配置是因?yàn)檎业揭粋€(gè)更好的方法:在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]
這樣就可以為每個(gè)不同的虛擬主機(jī)分別指定使用或者不使用jsp功能。
好了,可以開始開發(fā)和使用你的web應(yīng)用了!
參考文獻(xiàn):
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