基于Apache和多实例Tomcat(独立JVM)的虚拟主机方案
用虚拟主机方式为二级部门提供网站空间是一般学校的罕见做法,这样既能节省服务器设备的投资又减少了管理工作量。 Linux 环境下,通常使用 Apach 实现静态计算机基础知识http://www.woaidiannao.com HTML 和动态 PHP 网站的虚拟主机,使用 Tomcat 实现 JSP 网站的虚拟主机。对于 Apach 虚拟主机,配合 MySQL 数据库的 WEB 管理工具 PhpMyA dmin 已经有了很成熟的实现;而对于 Tomcat 虚拟主机来说,当多个网站共享同一个 Tomcat 服务器实例时,若其中某个网站对 Tomcat 有一些特殊的需求,就需要服务器管理员对 Tomcat 进行配置,更多的时候,服务器管理员要经常重启 Tomcat 顺序不好的网站也可能导致 Tomcat 无法启动,从而影响其他网站也无法访问。另外一个问题是同一台服务器上,单独的 Apach 和 Tomcat 服务顺序端口不能冲突,要同时使用 PHP 和 JSP 就需要使用不同的端口。
1 解决方案
为解决上述问题,本文对 Apach 与 Tomcat 进行整合,并实现 Tomcat 多实例独立 JVM 虚拟主机(每个虚拟主机用户拥有独立可管理的 Tomcat 服务器)用 Apach 解释 HTML 和 PHP 等文件, Tomcat 执行 JSP 顺序,整合原理如图 1 所示<a href="http://www.woaidiannao.com/html/ITjs/wljs/%3Cspan%20class=" style4"="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-wrap: break-word; color: rgb(51, 51, 51); text-decoration: none; ">计算机基础知识http://www.woaidiannao.com">计算机基础知识http://www.woaidiannao.com。
图 1 中, Apach 接受来自客户端的请求,并根据请求信息进行判断,若被请求的网站是 JSP 则由 Apach 模块 mod_jk 将 Servlet 或 JSP 请求转发给 Tomcat mod_jk 利用 AJP worker 通过 AJP Apach Jserv Protocol 协议与 Tomcat 进程通信, Tomcat 检查来自 AJP worker 请求,确定与请求相对应的虚拟主机,执行顺序,并将执行结果通过 AJP connector 返回给 mod_jk 最终由 Apach 将执行结果返回给客户端。
2 方案实现
2.1 基本系统安装准备
对所需软件进行准备和基本配置。
2.1.1 装置 LA MP 服务器软件
本文使用 CentOS 5.3 操作系统, Apach Mysql PHP 采用源码方式安装(装置位置: /usr/loc 软件版本分别是 Apach 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/profil 文件中配置 JDK 与 Tomcat 环境变量如下:
JA VA _HOME=/usr/local/jdk1.6.0_17
CLA SSPA TH=.:$JA VA _HOME/lib.tools.jar
PA TH=$JA VA _HOME/bin:$PA TH
export JA VA _HOME CLA SSPA TH PA TH
CA TA LINA _HOME=/usr/local/apache-tomcat-6.0.20
BA SEDIR=/usr/local/apache-tomcat-6.0.20
export CA TA LINA _HOME BA SEDIR
确保上述软件正确运行,限于篇幅,软件的装置过程从略,可通过 googl 搜索查阅。
2.1.3 下载 Apach 连接 Tomcat 模块 mod_jk
地址: http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.28/
注意,要根据服务器的平台和 Apach 版本下载相应的 mod_jk.so 文件,本文下载使用 mod_jk-1.2.28-httpd-2.2.X.so 文件。
2.2 Apach 虚拟主机配置
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 log temp webapps/ROOT 和 work 目录。
2.2.2 修改 Apach 配置文件 httpd.conf 添加虚拟主机
虚拟主机 site1.lzptc.edu.cn 配置如下:
NameVirtualHost *:80
<VirtualHost *:80>
DirectoryIndex index.html index.htm index.jsp index.php
ServerNam site1.lzptc.edu.cn
# 虚拟主机用户顺序位置
DocumentRoot /var/www/html/site1/webapps/ROOT
ServerA dmin xxx@lzptc.edu.cn
# Apach 遇见下列文件后,转给 Tomcat
JkMount /*.jsp site1-worker
JkMount /*.do site1-worker
JkMount /servlet/* site1-worker
# 目录访问权限设置
<Locat /var/www/html/site1/webapps/ROOT/WEB-INF/* >
Option Index FollowSymLinks
AllowOverrid None
deni from all
</Location>
# 目录访问权限设置
<Locat /var/www/html/site1/webapps/ROOT/META -INF/* >
AllowOverrid None
deni from all
</Location>
</VirtualHost>
加入第二个虚拟主机 site2.lzptc.edu.cn 用 “ site2 替换上边配置中的 site1 更多的虚拟主机同理。
2.3 A pach 与 Tomcat 整合, Tomcat 多实例配置
2.3.1 装置配置 mod_jk
1 复制 mod_jk-1.2.28-httpd-2.2.X.so 文件到 Apach modul 目录;
2 修改 httpd.conf 添加 mod_jk 支持:
# 添加 mod_jk 支持
LoadModul jk_modul modules/mod_jk-1.2.28-httpd-2.2.X.so
# mod_jk worker 配置文件 workers.properti 位置: Apach conf 目录
JkWorkersFil conf/workers.properties
# mod_jk 日志文件
JkLogFil logs/mod_jk.log
JkLogLevel error
# 日志时间格式
JkLogStampFormat [%a %b %d %H:%M:%S:%Y]
2.3.2 Apach conf 目录下建立 mod_jk 连接 Tomcat 配置文件 workers.properti
# 指定 Tomcat 和 JDK 路径
workers.tomcat_home=/usr/local/apache-tomcat-6.0.20
workers.java_home=/usr/local/jdk1.6.0_17
ps=/
# DEFA ULT worker list
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=ajp12, ajp13
worker.inprocess.type=jni
worker.inprocess.class_path=$ workers.tomcat_hom $ ps lib$ ps tomcat.jar
worker.inprocess.cmd_line=start
worker.inprocess.stdout=$ workers.tomcat_hom $ ps logs$ ps inprocess.stdout
worker.inprocess.stderr=$ workers.tomcat_hom $ ps logs$ ps inprocess.stderr
# 定义转发请求到不同 Tomcat worker 列表,此处定义 2 个,分别对应虚拟主机 site1 和 site2
worker.list=site1-worker,site2-worker
# 虚拟主机 site1.lzptc.edu.cn worker 定义,端口 8301 随后在用户的 server.xml 定义
worker.site1-worker.port=8301
worker.site1-worker.host=site1.lzptc.edu.cn
worker.site1-worker.type=ajp13
# 虚拟主机 site2.lzptc.edu.cn worker 定义,端口 8302 随后在用户的 server.xml 定义
worker.site2-worker.port=8302
worker.site2-worker.host=site2.lzptc.edu.cn
worker.site2-worker.type=ajp13
2.3.3 复制 Tomcat 配置文件 server.xml 文件到每个虚拟主机用户的 conf 目录下,对每个用户的 server.xml 进行端口设定,注意,每个虚拟主机的 Tomcat 端口是独立的虚拟主机 site1.lzptc.edu.cn 配置文件如下,其中 AJP/1.3 协议的端口号为 8301 这与 workers.properti 中 site1-work 端口号一致。同理可设定其他虚拟主机的 server.xml 文件。
<?xml version= 1.0 ′ encoding= utf-8 ′ ?>
<Server port= 8101 ″ shutdown= SHUTDOWN >
<! 此处配置省略 – >
<Servic name= Catalina >
<Connector port= 8201 ″ protocol= HTTP/1.1 ″
connectionTimeout= 20000 ″
redirectPort= 8443 ″ />
<Connector port= 8301 ″ protocol= AJP/1.3 ″ redirectPort= 8443 ″ />
<! 此处配置省略 – >
</Service>
</Server>
虚拟主机 site2.lzptc.edu.cn server.xml 文件配置如下:
<?xml version= 1.0 ′ encoding= utf-8 ′ ?>
<Server port= 8102 ″ shutdown= SHUTDOWN >
<! 此处配置省略 – >
<Servic name= Catalina >
<Connector port= 8202 ″ protocol= HTTP/1.1 ″
connectionTimeout= 20000 ″
redirectPort= 8443 ″ />
<Connector port= 8302 ″ protocol= AJP/1.3 ″ redirectPort= 8443 ″ />
<! 此处配置省略 – >
</Service>
</Server>
2.3.4 独立 Tomcat 启动停止
1 虚拟主机用户自行启动
每个虚拟主机用户启动独立的 Tomcat 需要给它设置独立 Tomcat CA TA LINA _BA SE 路径,这里将 CA TA LINA _BA SE 值设置为用户的家目录。为方便用户启动停止各自的 Tomcat 服务器,编写脚本 tomcat.sh 如下:
#!/bin/bash
# description: Start up the Tomcat servlet engine.
# Sourc function library.
. /etc/init.d/functions
RETVA L=$?
export CA TA LINA _BA SE= /var/www/html/site1 ″ # 用户的家目录,可修改
export CA TA LINA _HOME= /usr/local/apache-tomcat-6.0.20 ″
case $1 ″ in
start
if [ -f $CA TA LINA _HOME/bin/startup.sh ];
then
echo $ Start Tomcat
$CA TA LINA _HOME/bin/startup.sh
fi
;;
stop
if [ -f $CA TA LINA _HOME/bin/shutdown.sh ];
then
echo $ Stop Tomcat
$CA TA LINA _HOME/bin/shutdown.sh
fi
;;
*
echo $ Usage: $0 {start|stop}
exit 1
;;
esac
exit $RETVA L
将该脚本文件保存在虚拟主机用户的家目录下,添加执行权限,用户运行 tomcat.sh start|stop 命令即可启动 / 定制自己的 Tomcat 服务器。
2 服务器管理员统一启动
当服务器重启后,需要服务器的管理员统一对各独立的 Tomcat 实例进行启动,编写脚本如下,可以将该脚本设置为开机启动。
#!/bin/bash
CA TA LINA _HOME= /usr/local/apache-tomcat-6.0.20
SITE_ROOT= /var/www/html # 所有的虚拟主机家目录都在此处
SITES=`l ${SITE_ROOT}`
for x in ${SITES}
do
CA TA LINA _BA SE=${SITE_ROOT}/${x}
echo Start server: ${x} with CA TA LINA _BA SE=${CA TA LINA _BA SE}
export CA TA LINA _BA SE
${CA TA LINA _HOME}/bin/startup.sh
done
2.4 为每个独立的 JVM 设定内存限制
增加 Tomcat 环境变量 JVM_OPTIONS 设置举例如下
JVM_OPTIONS= -Xms32m – Xmx64m
export JA VA _OPTS
其中 “ Xms32m – Xmx64m 表示该 JVM 初始内存为 32MB 设定该 JVM 能使用的最大内存为 64MB
3 总结
通过对 Apach 和 Tomcat 整合,使客户端能够通过同一端口访问 WEB 服务器的 PHP 和 JSP 顺序,并实现 Tomcat 多实例独立 JVM 虚拟主机,方便虚拟主机用户对各自虚拟主机的控制,克服了单个 Tomcat 运行 JSP 顺序时虚拟主机之间会产生影响的缺点。
更多推荐
所有评论(0)