免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5988 | 回复: 14
打印 上一主题 下一主题

[Web] Tomcat 5 + Apache 2 + mod_jk 2 实现虚拟主机 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-03-17 08:58 |只看该作者 |倒序浏览
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 里面的
  1. #AddDefaultCharset ISO-8859-1
复制代码

前面加#注销掉,很多人提问为什么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下运行
  1. JAVA_HOME=/usr/local/j2sdk1.4.2-04;export $JAVA_HOME
  2. PATH=$PATH:$JAVA_HOME/bin
复制代码
如果你需要所有的用户都可以使用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个用户,最简单的例子文件如下:
  1. <?xml version='1.0' encoding='utf-8'?>;
  2. <tomcat-users>;
  3.   <role rolename="tomcat"/>;
  4.   <role rolename="role1"/>;
  5.   <role rolename="manager"/>;
  6.   <role rolename="admin"/>;
  7.   <user username="tomcat" password="tomcat" roles="tomcat"/>;
  8.   <user username="both" password="tomcat" roles="tomcat,role1"/>;
  9.   <user username="role1" password="tomcat" roles="role1"/>;
  10.   <user username="admin" password="administratorpassword123" roles="admin,manager"/>;
  11. </tomcat-users>;
复制代码

启动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 然后,运行
  1. sh support/buildconf.sh
  2. ./configure
  3. make
复制代码

(注意:tomcat-5.0.18版本带的jsvc源代码有一个低级错误--少一个分号,会导致编译不成功,可以自己加上这个分号)

tomcat自己带的jsvc-src/native目录下还有两个脚本 Tomcat.sh 和 Tomcat5.sh ,可以用作启动和停止tomcat的脚本,我把Tomcat5.sh略作修改,文件如下:

  1. #!/bin/sh
  2. #
  3. # Startup Script for Tomcat5
  4. #
  5. # chkconfig: 345 87 13
  6. # description: Tomcat Daemon
  7. # processname: jsvc
  8. # pidfile: /var/run/jsvc.pid
  9. # config:
  10. #
  11. # Source function library.
  12. . /etc/rc.d/init.d/functions
  13. #
  14. prog=tomcat
  15. #
  16. # Small shell script to show how to start/stop Tomcat using jsvc
  17. # If you want to have Tomcat running on port 80 please modify the server.xml
  18. # file:
  19. #
  20. #    <!-- Define a non-SSL HTTP/1.1 Connector on port 80 -->;
  21. #    <Connector className="org.apache.catalina.connector.http.HttpConnector"
  22. #               port="80" minProcessors="5" maxProcessors="75"
  23. #               enableLookups="true" redirectPort="8443"
  24. #               acceptCount="10" debug="0" connectionTimeout="60000"/>;
  25. #
  26. # You need a developement version of Tomcat (Apache Tomcat/4.1-dev)
  27. #
  28. # Adapt the following lines to your configuration

  29. #设定自己的参数
  30. JAVA_HOME=/usr/local/j2sdk1.4.2-04
  31. CATALINA_HOME=/usr/local/jakarta-tomcat-5.0.19
  32. DAEMON_HOME=$CATALINA_HOME/bin
  33. #需要在系统中设定一个没有权限的
  34. #用户来运行,这样比较安全
  35. TOMCAT_USER=tomcat5
  36. TMP_DIR=/var/tmp
  37. CATALINA_OPTS=
  38. CLASSPATH=\
  39. $JAVA_HOME/lib/tools.jar:\
  40. $CATALINA_HOME/bin/commons-daemon.jar:\
  41. $CATALINA_HOME/bin/bootstrap.jar

  42. start(){
  43.     echo -n $"Starting $prog: "
  44.     #
  45.     # Start Tomcat
  46.     #
  47.     $DAEMON_HOME/jsvc-src/jsvc \
  48.     -user $TOMCAT_USER \
  49.     -home $JAVA_HOME \
  50.     -Dcatalina.home=$CATALINA_HOME \
  51.     -Djava.io.tmpdir=$TMP_DIR \
  52.     -outfile $CATALINA_HOME/logs/catalina.out \
  53.     -errfile '&1' \
  54.     $CATALINA_OPTS \
  55.     -cp $CLASSPATH \
  56.     org.apache.catalina.startup.Bootstrap
  57.     #
  58.     # To get a verbose JVM
  59.     #-verbose \
  60.     # To get a debug of jsvc.
  61.     #-debug \
  62.     RETVAL=$?
  63.     [ $RETVAL = 0 ] && touch /var/lock/subsys/jsvc
  64.     [ $RETVAL = 0 ] && echo_success || echo_failure
  65.     echo
  66.     return $RETVAL
  67. }
  68. stop(){
  69.     echo -n $"Stopping $prog: "
  70.     #
  71.     # Stop Tomcat
  72.     #
  73.     PID=`cat /var/run/jsvc.pid`
  74.     kill $PID
  75.     RETVAL=$?
  76.     [ $RETVAL = 0 ] && rm /var/lock/subsys/jsvc
  77.     [ $RETVAL = 0 ] && echo_success || echo_failure
  78.     echo
  79.     return $RETVAL
  80. }

  81. case "$1" in
  82.   start)
  83.         start
  84.     ;;

  85.   stop)
  86.         stop
  87.     ;;

  88.   restart|reload)
  89.         stop
  90.         start
  91.     ;;

  92.   *)
  93.     echo "Usage $0 start/stop"
  94.     exit 1;;
  95. esac
复制代码

把这段代码保存为 /etc/rc.d/init.d/tomcat ,然后运行
  1. chkconfig --add tomcat
复制代码
即可把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 解压,然后
  1. cd /jakarta-tomcat-connectors-jk2-2.0.2-src/jk/native2
  2. ./buildconf.sh
复制代码
然后运行
  1. ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-java-home=/usr/local/j2sdk1.4.2-04
复制代码

(具体路径按照你实际的调整)
运行
  1. make jk2-build-apxs
  2. cd server/apache2
  3. make -f Makefile.apxs install
复制代码

其实这个软件包本来有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/>;,
  1. <Host name="vhosts.vicp.net" debug="0"
  2.     appBase="/opt/jakarta-tomcat-4.1.12-LE-jdk14/webapps/struts-example"
  3.     unpackWARs="true" autoDeploy="true">;
  4.     <Alias>;localhost</Alias>;
  5.     <Alias>;www</Alias>;
  6.     <Alias>;10.0.0.10</Alias>;
  7.     <Context path="" docBase="" debug="1"/>;
  8.         <Valve className="org.apache.catalina.valves.AccessLogValve"
  9.             directory="logs"  prefix="vhost.vicp.net_access_log." suffix=".txt"
  10.             pattern="common" resolveHosts="false"/>;
  11.         <Logger className="org.apache.catalina.logger.FileLogger"
  12.                  directory="logs"  prefix="home_log_" suffix="_app_log.txt"
  13.             timestamp="true"/>;
  14. </Host>;
复制代码

调整里面的参数和设置使之适合你的环境,当然,如果你还有其他的<host/>;添加在后面。

在 /usr/local/apache/conf 下面创建一个workers2.properties,内容如下:

  1. #---- worker2.properties

  2. [logger.apache2]
  3. level=DEBUG

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

  8. # Example socket channel, explicitly set port and host.
  9. [channel.socket:localhost:8009]
  10. tomcatId=localhost:8009
  11. port=8009
  12. host=127.0.0.1

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

  16. #[status:status]

  17. # Uri mapping

  18. #[uri:/jkstatus/*]
  19. #group=status:status

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

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

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

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

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

  30. #---- end of workers2.properties
复制代码


当然,你可以删除其中的注释符使其中的uri和worker的配置生效,我现在不用这种方式配置是因为找到一个更好的方法:在httpd.conf里面配置:

把下面这段放到VirtualHost之前,可以从全局避免用户用apache访问WEB-INF目录。
  1. <Directory ~ "/WEB-INF/">;
  2.     Order allow,deny
  3.     Deny from all
  4. </Directory>;
复制代码


典型的VirtualHost配置样本

  1. <VirtualHost _default_:80>;
  2.         ServerName vhost.vicp.net
  3.         DocumentRoot /home/webapp/public_html/
  4.         DirectoryIndex index.htm index.html default.htm index.php index.jsp
  5.         <Location ~ "/*.jsp|/*/servlet/*">;
  6.             JkUriSet worker ajp13:localhost:8009
  7.         </Location>;
  8.         ErrorLog logs/vhosts.vicp.net-err_log
  9.         CustomLog logs/vhosts.vicp.net-acc_log common
  10. </VirtualHost>;
复制代码

这样就可以为每个不同的虚拟主机分别指定使用或者不使用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

论坛徽章:
0
2 [报告]
发表于 2004-03-22 16:29 |只看该作者

Tomcat 5 + Apache 2 + mod_jk 2 实现虚拟主机

有朋友试过了吗!看起来的确是好文档!

论坛徽章:
0
3 [报告]
发表于 2004-04-02 05:57 |只看该作者

Tomcat 5 + Apache 2 + mod_jk 2 实现虚拟主机

[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的时候的问题呢?

论坛徽章:
0
4 [报告]
发表于 2004-04-02 08:00 |只看该作者

Tomcat 5 + Apache 2 + mod_jk 2 实现虚拟主机

Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: undefined symbol: compress
不是写得很清楚吗?php5的模块有问题,可能是一些库的link设置不对。

论坛徽章:
0
5 [报告]
发表于 2004-04-08 12:01 |只看该作者

Tomcat 5 + Apache 2 + mod_jk 2 实现虚拟主机

[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]#

论坛徽章:
0
6 [报告]
发表于 2004-04-08 18:58 |只看该作者

Tomcat 5 + Apache 2 + mod_jk 2 实现虚拟主机

php5那么快就用新的啦..

论坛徽章:
0
7 [报告]
发表于 2004-04-27 07:16 |只看该作者

Tomcat 5 + Apache 2 + mod_jk 2 实现虚拟主机

你autoconf和automake都没装,运行buildconf.sh需要这两个包。

论坛徽章:
0
8 [报告]
发表于 2004-04-30 20:57 |只看该作者

Tomcat 5 + Apache 2 + mod_jk 2 实现虚拟主机

急问:怎么我配置时候说不能加上apxs呢?我的apache是2,locate了一下apxs确实就一条是一个html文件,估计是帮助文件,怎么办呢?谢谢!

论坛徽章:
0
9 [报告]
发表于 2004-04-30 21:52 |只看该作者

Tomcat 5 + Apache 2 + mod_jk 2 实现虚拟主机

没有Uri的地方,直接显示JSP源码,这个是对的
为什么Uri指向以后,就一直没反映呢?

论坛徽章:
0
10 [报告]
发表于 2004-05-03 02:43 |只看该作者

Tomcat 5 + Apache 2 + mod_jk 2 实现虚拟主机

我已经指定了不管在什么地方,只要有 .jsp结尾的文件,就自动转向,所以不应该出现jsp源码被显示的问题。
如果你的jsp页面不能正常被显示,就要看查看日志看看错在什么地方了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP