Tomcat 5 + Apache 2 + mod_jk 2 實現虛擬主機
發表于:2007-06-08來源:作者:點擊數:
標簽:
Tomcat5實現了servlet2.4和jsp2.0,在 性能 上有所提升,尤其是,對我們來說,實現了真正的中文支持,無需添加特別參數就可以直接顯示中文內容,讓java和jsp中文問題成為歷史! 1.首先apache2,unix/ linux 下面就從源代碼編譯安裝,最重要的configure參數是
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 w
ant 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"
# a
clearcase/" target="_blank" >cceptCount="10" de
bug="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 \
-erri&s;'''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
tianyaly 回復于:2004-03-22 16:29:49
|
有朋友試過了嗎!看起來的確是好文檔!
|
bing65 回復于:2004-04-02 05:57:34
|
[root@localhost root]# /usr/local/apache2/bin/apachectl start
Syntax error on line 232 of /usr/local/apache2/conf/httpd.conf:
Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: undefined symbol: compress
是不是安裝PHP的時候的問題呢?
|
perryhg 回復于:2004-04-02 08:00:04
|
Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: undefined symbol: compress
不是寫得很清楚嗎?php5的模塊有問題,可能是一些庫的link設置不對。
|
loess 回復于:2004-04-08 12:01:02
|
[root@hanwei native2]# ./buildconf.sh
rm autom4te.cache
libtoolize --force --automake --copy
./buildconf.sh: line 7: libtoolize: command not found
aclocal
./buildconf.sh: line 9: aclocal: command not found
automake --copy --add-missing
./buildconf.sh: line 11: automake: command not found
autoconf
./buildconf.sh: line 13: autoconf: command not found
[root@hanwei native2]#
|
blanc 回復于:2004-04-08 18:58:31
|
php5那么快就用新的啦..
|
perryhg 回復于:2004-04-27 07:16:23
|
你autoconf和automake都沒裝,運行buildconf.sh需要這兩個包。
|
fishfree 回復于:2004-04-30 20:57:09
|
急問:怎么我配置時候說不能加上apxs呢?我的apache是2,locate了一下apxs確實就一條是一個html文件,估計是幫助文件,怎么辦呢?謝謝!
|
我是笨笨 回復于:2004-04-30 21:52:54
|
沒有Uri的地方,直接顯示JSP源碼,這個是對的
為什么Uri指向以后,就一直沒反映呢?
|
perryhg 回復于:2004-05-03 02:43:53
|
我已經指定了不管在什么地方,只要有 .jsp結尾的文件,就自動轉向,所以不應該出現jsp源碼被顯示的問題。
如果你的jsp頁面不能正常被顯示,就要看查看日志看看錯在什么地方了。
|
我是笨笨 回復于:2004-05-03 09:29:46
|
報告說是404,找不?04,找不到文件
文件
但如果不指定URI,就可以出來,但是是源代碼
指定了以后,就一直沒反映了,LOG里是404錯誤
:wink:
|
perryhg 回復于:2004-05-03 18:23:24
|
看 ERROR_LOG 而不是Access log
|
preyswee1982 回復于:2004-05-03 23:29:53
|
[quote:cde9b1c7c7="perryhg"]5.編譯和設置mod_jk
windows版本的mod_jk可以直接從 jakarta.apache.org 下載binary版本,linux下只好下載源代碼編譯了。[/quote:cde9b1c7c7]
現在有binary版了
for fedora core1
|
我是笨笨 回復于:2004-05-04 01:27:30
|
[quote:618d29abb5="perryhg"]看 ERROR_LOG 而不是Access log[/quote:618d29abb5]
看了,是File not found,404錯誤
怎么回事呢?
|
perryhg 回復于:2004-05-04 06:37:39
|
Error_log 應該是象這樣的東西
[code:1:efcc408746]
[Tue May 04 05:30:17 2004] [error] [client 218.22.246.86] File does not exist: /home/virtweb/default.ida
[/code:1:efcc408746]
而不是404,404 Error是access log里面顯示的,通過Error_log你就應該看到具體發生了什么事情了。另外,看看你的tomcat的log,有沒有記錄訪問,如果沒有,說明modjk
原文轉自:http://www.anti-gravitydesign.com
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97
|