`
RonQi
  • 浏览: 93275 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

apache2.2.21+tomcat6+mod_jk在Windows中配置多域名对应单独IP虚拟主机

 
阅读更多

需求:

多个域名可以指向唯一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服务器集成

分享到:
评论
1 楼 念QC 2015-10-07  
配置后tomcat无法启动,tomcat另外配置host节点是不是还要改别的地方

相关推荐

    Apache2.2 with mod_jk

    【描述】中的信息揭示了一个更复杂的部署环境:Apache 2.2.21版本被用作反向代理,通过mod_jk与两个Tomcat实例协同工作,构建了一个Tomcat集群。这样的设置通常用于提高Web应用程序的可用性和性能,因为负载可以被...

    apache-httpd-2.2.21-win32-x86-no_ssl.msi+tomcat7.0.11

    - **虚拟主机**:在Apache配置中定义虚拟主机,以便根据域名或端口将请求导向不同的Tomcat实例。 - **JVMRoute**:用于标识会话应该路由到哪个Tomcat实例,通常通过cookie或URL参数实现。 - **故障检测**:监控...

    一台xp机器实现apache+tomcat session复制.docx

    【Apache + Tomcat Session 复制】:在一台运行Windows XP的计算机上,要实现Apache HTTP Server和Tomcat的负载均衡以及Session复制,通常需要使用Apache的mod_jk模块。这个过程涉及到Apache、Tomcat的配置,以及mod...

    apache-httpd-2.2.21和mod_jk连接tomcat套件 linux

    Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,...mod_jk 也叫 JK,这是一款 Apache/IIS 用来连接后台Tomcat的模块,支持集群和负载均衡。

    linux_apache+tomcat负载均衡安装和调试.pdf

    3. **配置mod_jk.conf**:创建或编辑`mod_jk.conf`,设定虚拟主机和worker的关系,以及URL重定向规则。 五、常见问题与解决方案 在实际调试过程中,可能会遇到访问页面时出现“CSRF Security Error”错误提示。这...

    windows环境下apache-httpd-2.2.21和mod_jk1.2.32套件

    Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,...mod_jk 也叫 JK,这是一款 Apache/IIS 用来连接后台Tomcat的模块,支持集群和负载均衡。

    tomcat服务集群+apache负载均衡+jk链接tomcat-apache

    4. **JK配置**:在Apache服务器中,需要配置mod_jk模块的参数,包括定义每个Tomcat实例的位置、工作模式(如轮询或基于权重的分配)、健康检查机制等。此外,Tomcat也需要配置相应的服务器监听和JK连接器设置。 5. ...

    apache+tomcat集群配置

    ### Apache + Tomcat 集群配置详解 #### 一、引言 在现代Web应用环境中,为了提高网站的可用性、稳定性和扩展性,通常会采用Apache与Tomcat组合的方式来构建高性能的服务集群。本文将详细介绍如何在RedHat 6.1系统...

    轻松实现Apache,Tomcat集群和负载均衡.pdf

    3. mod_jk模块,它是Apache与Tomcat之间通信的连接器(对应Apache版本,如tomcat-connectors-1.2.32) 接下来,按照以下步骤操作: 1. **安装与配置Apache**: - 下载并安装Apache,将其解压至E:\ide\apache\...

    linux下apache2.2整合tomcat6详细步骤.docx

    在Linux环境下,将Apache2.2与Tomcat6进行整合是一项常见的任务,这通常涉及到创建一个Web服务器集群,以便能够处理动态和静态内容。Apache作为前端服务器,主要负责静态资源的处理,而Tomcat作为后端应用服务器,...

    apache和tomcat整合.pdf

    配置Apache以使用mod_jk - **加载mod_jk模块**:编辑`httpd.conf`文件,添加`LoadModule jk_module modules/mod_jk.so` - **创建JSP应用目录**:`mkdir myjsp`;进入目录`cd myjsp`;复制`index.jsp`到该目录下;...

Global site tag (gtag.js) - Google Analytics