需求:
多个域名可以指向唯一IP的80端口,并且每个域名对应单独的Tomcat实例运行的web项目。
假设有两个域名:www.test1.com www.test2.com
都指向本机ip:192.168.0.66
分别对应两个
tomcat-6.0.32的默认docs项目和
tomcat-6.0.33的默认examples项目。
环境:
系统:Windows XP
Apache2.2.21:安装文件:httpd-2.2.21-win32-x86-no_ssl.msi
Tomcat:apache-tomcat-6.0.32、apache-tomcat-6.0.33
Tomcat-Connectors:tomcat-connectors-1.2.32-windows-i386-httpd-2.2.x.zip
JDK:jdk1.6.0_16
安装:
apache使用80端口;
Tomcat使用的绿色解压缩包,注意端口配置,不用冲突;
先保证直接访问http://localhost 能看到apache主页,两个Tomcat都能正常启动。
配置:
1. 拷贝mod_jk.mo到<apache_home>/modules目录下。
2. 修改<apache_home>/conf/httpd.conf配置文件:
在
httpd.conf
文件最后增加以下内容
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.test1.com
ServerAlias test1.com *.test1.com
DocumentRoot "D:\apache-tomcat-6.0.32\webapps\docs"
DirectoryIndex index.html index.htm index.jsp
JkMount /servlet/* test1
JkMount /*.jsp test1
JkMount /*.htm test1
JkMount /*.html test1
JkMount /*.action test1
JkMount /* test1
</VirtualHost>
<Directory "D:\apache-tomcat-6.0.32\webapps\docs">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<VirtualHost *:80>
ServerName www.test2.com
DocumentRoot "D:\apache-tomcat-6.0.33\webapps\examples"
DirectoryIndex index.html index.htm index.jsp
JkMount /servlet/* test2
JkMount /*.jsp test2
JkMount /*.htm test2
JkMount /*.action test2
JkMount /* test2
</VirtualHost>
<Directory "D:\apache-tomcat-6.0.33\webapps\examples">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
3. 创建
<apache_home>/conf/workers.properties文件
#workers.tomcat_home=D:\apache-tomcat-6.0.33 #让mod_jk模块知道tomcat的位置
#workers.java_home=D:\Java\jdk1.6.0_16\jre #让mod_jk模块知道jre的位置
#ps=\
worker.list=test1,test2#模块版本
worker.test1.port=8009 #工作端口,若没占用则不用修改
worker.test1.host=www.test1.com #本机,若上面的Apache主机不为localhost,作相应修改
worker.test1.type=ajp13 #类型
worker.test1.lbfactor=1 #代理数,不用修改
worker.test2.port=8109 #工作端口,若没占用则不用修改
worker.test2.host=www.test2.com #本机,若上面的Apache主机不为localhost,作相应修改
worker.test2.type=ajp13 #类型
worker.test2.lbfactor=1 #代理数,不用修改
注:开头注释的三行,网上帖子说是加上,我看孙MM的书上没有,但我发现一个奇怪的问题,即使我注释掉这三行,在我的机器上也正常,但是如果删掉这三行,配置的日志 mod_jk.log 就报错了
,如下
[Mon Oct 24 17:49:50.895 2011] [3772:4228] [error] uri_worker_map_ext::jk_uri_worker_map.c (506): Could not find worker with name 'mz1' in uri map post processing.
[Mon Oct 24 17:49:50.895 2011] [3772:4228] [error] uri_worker_map_ext::jk_uri_worker_map.c (506): Could not find worker with name 'mz1' in uri map post processing.
[Mon Oct 24 17:49:50.895 2011] [3772:4228] [error] uri_worker_map_ext::jk_uri_worker_map.c (506): Could not find worker with name 'mz1' in uri map post processing.
[Mon Oct 24 17:49:50.895 2011] [3772:4228] [error] uri_worker_map_ext::jk_uri_worker_map.c (506): Could not find worker with name 'mz1' in uri map post processing.
[Mon Oct 24 17:49:51.035 2011] [1496:3064] [info] init_jk::mod_jk.c (3252): mod_jk/1.2.32 () initialized
[Mon Oct 24 17:49:51.035 2011] [1496:3064] [error] uri_worker_map_ext::jk_uri_worker_map.c (506): Could not find worker with name 'mz2' in uri map post processing.
[Mon Oct 24 17:49:51.035 2011] [1496:3064] [error] uri_worker_map_ext::jk_uri_worker_map.c (506): Could not find worker with name 'mz2' in uri map post processing.
[Mon Oct 24 17:49:51.035 2011] [1496:3064] [error] uri_worker_map_ext::jk_uri_worker_map.c (506): Could not find worker with name 'mz2' in uri map post processing.
我试着把workers.properties的第一行空着,也就是下面这样
#此行为空
worker.list=test1,test2#模块版本
worker.test1.port=8009 #工作端口,若没占用则不用修改
worker.test1.host=www.test1.com #本机,若上面的Apache主机不为localhost,作相应修改
worker.test1.type=ajp13 #类型
worker.test1.lbfactor=1 #代理数,不用修改
worker.test2.port=8109 #工作端口,若没占用则不用修改
worker.test2.host=www.test2.com #本机,若上面的Apache主机不为localhost,作相应修改
worker.test2.type=ajp13 #类型
worker.test2.lbfactor=1 #代理数,不用修改
启动apache又正常了,目前不得其解
。
4. 修改
Tomcat配置文件
AJP端口为8009的<Tomcat_HOME>/conf/server.xml配置
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
<Host name="www.test1.com" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="docs" reloadable="true" crossContext="true"/>
</Host>
AJP端口为8109的<Tomcat_HOME>/conf/server.xml配置
<Connector port="8109" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
<Host name="www.test2.com" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="examples" reloadable="true" crossContext="true"/>
</Host>
5. HOSTS配置
为了在本地测试,可以修改C:/Windows/system32/drivers/etc/HOSTS文件,增加本地域名解析
127.0.0.1 www.test1.com
127.0.0.1 www.test2.com
配置完毕,分别启动两个Tomcat,然后启动Apache服务器,然后访问www.test1.com和www.test2.com,应该可以分别访问到两个单独的项目。
附:
1. 删除Apache服务
Windows下运行-->cmd进入命令行-->进入<Apache_HOME>/bin目录,执行以下命令:
httpd -k uninstall
如果继续删除Apache软件的话,还得进入“添加删除程序”界面,删除安装的Apache软件,然后手工删除安装目录下的剩余文件和开始菜单里的内容。
2. 指定URI的编码
我们都知道如果使用Tomcat作为Web服务器时,是在server.xml的<Connector />里指定URI编码,例如
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443"
URIEncoding="UTF-8"
/>
但如果使用Apache作为前端Web服务器,那么就不会在使用Tomcat的HTTP端口了(即8080端口),这时需要在AJP端口指定编码
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
另外我有一个问题,如果使用apache+tomcat+mod_jk可以配置负载均衡,那如果又要配置虚拟主机,又要配置负载均衡,不知能否实现
参考:
1. apache+tomcat+mod_jk整合配置虚拟主机
2. 孙卫琴《Tomcat与Java Web开发技术详解》26章 Tomcat与其他HTTP服务器集成
分享到:
相关推荐
win2K3下 apache2.2.21+php5.3.8+mysql5.5.17+phpMyAdmin3.4.7
apache2.2.21+php5.3.8 for windows安装包,内附问题 LoadModule takes two arguments和Can't locate API module structure `php5_module' in file D:/Program Files/php5.3.8/php5.dll: No error的解决办法。这里...
Apache2.2.21,已经集成了mod_jk,与两个tomcat做成tomcat集群
( WindowsXP下(32位)Apache2.2.21集成Tomcat7.0
apache2.2.21win32-x86-no_ssl+mysql5.5+phpv5.3.8.zip
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,...mod_jk 也叫 JK,这是一款 Apache/IIS 用来连接后台Tomcat的模块,支持集群和负载均衡。
tomcat集群 apache-httpd-2.2.21-win32-x86-no_ssl.msi+tomcat7.0.11
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,...mod_jk 也叫 JK,这是一款 Apache/IIS 用来连接后台Tomcat的模块,支持集群和负载均衡。
内容适合win7用户,xp下可能有所不同,需要拷贝一些配置文件,请自行查询。 这里是分别安装apache、php、mysql、phpmyadmin,并非集成的那种。 以下安装方法仅是个人安装总结,方法并不唯一,有其他可选余地,仅供...
提供以下三个windows版本 apache mod_h264_streaming.so下载 1.Apache/2.2.34 (Win32) 2.Apache/2.4.48 (Win64) 3.Apache/2.4.48 (Win32) 注意:测试过程中,发现httpd.conf配置引用mod_h264_streaming.so后,含有...
Apache2.2.21 安装包下载
一、安装Apache,配置成功一个普通网站服务器 运行下载好的“apache_2.0.55-win32-x86-no_ssl.msi”,出现如下界面: 出现Apache HTTP Server 2.0.55的安装向导界面,点“Next”继续 确认同意软件安装...
httpd-2.2.21-win32-x86-openssl-0.9.8r.msi(Apache 2.2.21 openssl版本) •mysql-5.5.20-win32.msi(MySQL 5.5.20) •php-5.3.10-Win32-VC9-x86.zip(PHP 5.3.10 thread safe版本) •Windows 7 Ultimate 32bit
Apache的安装与配置 打开apache官方网站 http://archive.apache.org/dist/httpd/binaries/win32/ 或者镜像网站 http://apache.mirror.phpchina.com/httpd/binaries/win32/,下载里面的apache_2.2.20-win32-x86-no_...
httpd-2.2.21-win32-x86-no_ssl.msi
apache_2.2.21-x64-no-ssl.msi
资源名称:Apache v2.2.21工具简介:Apache是最流行的HTTP服务器软件之一,快速、可靠、可通过简单的API扩展,Perl/Python解释器可被编译到服务器中,完全免费,完全源代码开放,如果你需要创建一个每天有数百万人...
ARC_Alkali_Rydberg_Calculator-2.2.21-cp37-macosx_x86_64.whl
ARC_Alkali_Rydberg_Calculator-2.2.21-cp36-macosx_x86_64.whl
主要介绍了Windows下安装Apache 2.2.21图文教程,文中还列举了一些安装中可能遇到的常见问题,需要的朋友可以参考下