日期:2014-05-17 浏览次数:20956 次
本文对Apache和Tomcat服务器软件进行整合,并实现Tomcat多实例独立JVM的虚拟主机。 用虚拟主机方式为二级部门提供网站空间是一般学校的常见做法,这样既能节省服务器设备的投资又减少了管理工作量。Linux环境下,通常使用Apache实现静态HTML和动态PHP网站的虚拟主机,使用Tomcat实现JSP网站的虚拟主机。对于Apache虚拟主机,配合MySQL数据库的WEB管理工具PhpMyAdmin已经有了很成熟的实现;而对于Tomcat虚拟主机来说,当多个网站共享同一个Tomcat服务器实例时,若其中某个网站对Tomcat有一些特殊的需求,就需要服务器管理员对Tomcat进行配置,更多的时候,服务器管理员要经常重启Tomcat,程序不好的网站也可能导致Tomcat无法启动,从而影响其他网站也无法访问。另外一个问题是,同一台服务器上,单独的Apache和Tomcat服务程序端口不能冲突,要同时使用PHP和JSP,就需要使用不同的端口。 1 解决方案 为解决上述问题,本文对Apache与Tomcat进行整合,并实现Tomcat多实例独立JVM的虚拟主机(每个虚拟主机用户拥有独立可管理的Tomcat服务器),用Apache解释HTML和PHP等文件,Tomcat执行JSP程序,整合原理如图1所示。 图1中,Apache接受来自客户端的请求,并根据请求信息进行判断,若被请求的网站是JSP的,则由Apache的模块mod_jk将Servlet或JSP请求转发给Tomcat,mod_jk利用AJP worker通过AJP(Apache Jserv Protocol)协议与Tomcat进程通信,Tomcat检查来自AJP workers的请求,确定与请求相对应的虚拟主机,执行程序,并将执行结果通过AJP connector返回给mod_jk,最终由Apache将执行结果返回给客户端。 2 方案实现 2.1 基本系统安装准备 对所需软件进行准备和基本配置。 2.1.1 安装LAMP服务器软件 本文使用CentOS 5.3操作系统,Apache、Mysql、PHP采用源码方式安装(安装位置:/usr/local),软件版本分别是:Apache 2.2.11,Mysql 5.1.47,PHP 5.2.9。 2.1.2 安装tomcat服务器软件 1) 安装JDK(本文版本:1.6.0_17); 2) 安装Tomcat(本文版本:apache-tomcat-6.0.20),默认情况下Tomcat服务的端口为8080; 3) 在/etc/profile文件中配置JDK与Tomcat的环境变量如下: JAVA_HOME=/usr/local/jdk1.6.0_17 CLASSPATH=.:$JAVA_HOME/lib.tools.jar PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH CATALINA_HOME=/usr/local/apache-tomcat-6.0.20 BASEDIR=/usr/local/apache-tomcat-6.0.20 export CATALINA_HOME BASEDIR 确保上述软件正确运行,限于篇幅,软件的安装过程从略,可通过google搜索查阅。 2.1.3 下载Apache连接Tomcat的模块mod_jk 地址:http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.28/ 注意,要根据服务器的平台和Apache的版本下载相应的mod_jk.so文件,本文下载使用mod_jk-1.2.28-httpd-2.2.X.so文件。 2.2 Apache虚拟主机配置 2.2.1 配置DNS服务器,添加虚拟主机的域名 这里配置2个虚拟主机,域名分别是site1.lzptc.edu.cn和site2.lzptc.edu.cn,均指向这台服务器。 2.2.2 添加虚拟主机用户 添加虚拟主机用户,为用户设定家目录,如: useradd site1 -d /var/www/html/site1 passwd site1 以虚拟主机用户登陆服务器,在其家目录下建立conf、logs、temp、webapps/ROOT和work目录。 2.2.2 修改Apache配置文件httpd.conf,添加虚拟主机 虚拟主机site1.lzptc.edu.cn的配置如下: NameVirtualHost *:80 <VirtualHost *:80> DirectoryIndex index.html index.htm index.jsp index.php ServerName site1.lzptc.edu.cn # 虚拟主机用户程序位置 DocumentRoot /var/www/html/site1/webapps/ROOT ServerAdmin xxx@lzptc.edu.cn # Apache遇见下列文件后,转给Tomcat JkMount /*.jsp site1-worker JkMount /*.do site1-worker JkMount /servlet/* site1-worker # 目录访问权限设置 <Location “/var/www/html/site1/webapps/ROOT/WEB-INF/*”> Options Indexes FollowSymLinks AllowOverride None deny from all </Location> # 目录访问权限设置 <Location “/var/www/html/site1/webapps/ROOT/META-INF/*”> AllowOverride None deny from all </Location> </VirtualHost> 加入第二个虚拟主机site2.lzptc.edu.cn(用“site2”替换上边配置中的“site1”),更多的虚拟主机同理。 2.3 Apache与Tomcat整合,Tomcat多实例配置 2.3.1 安装配置mod_jk 1) 复制mod_jk-1.2.28-httpd-2.2.X.so文件到Apache的module目录; 2) 修改httpd.conf,添加mod_jk支持: # 添加mod_jk支持 LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.2.X.so # mod_jk worker 配置文件workers.properties的位置:Apache的conf目录 JkWorkersFile conf/workers.properties # mod_jk 日志文件 JkLogFile logs/mod_jk.log JkLogLevel error # 日志时间格式 JkLogStampFormat “[%a %b %d %H:%M:%S:%Y]“ 2.3.2 在Apache的conf目录下建立mod_jk连接Tomcat的配置文件workers.properties: # 指定Tomcat和JDK的路径 workers.tomcat_home=/usr/local/apache-tomcat-6.0.20 workers.java_home=/usr/local/jdk1.6.0_17 ps=/ #—— DEFAULT worker list —————————————— worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=ajp12, ajp13 worker.inprocess.type=jni worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar worker.inprocess.cmd_line=start worker.inprocess.stdout=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stdout