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

http://ronqi.iteye.com/blog/1211477   比较靠谱的文章




需求:

多个域名可以指向唯一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 文件最后增加以下内容

Xml代码  
  1. NameVirtualHost *:80  
  2.   
  3. <VirtualHost *:80>  
  4.     ServerName www.test1.com  
  5.     ServerAlias test1.com *.test1.com  
  6.     DocumentRoot "D:\apache-tomcat-6.0.32\webapps\docs"  
  7.     DirectoryIndex index.html index.htm index.jsp  
  8.     JkMount /servlet/* test1   
  9.     JkMount /*.jsp test1   
  10.     JkMount /*.htm test1   
  11.     JkMount /*.html test1   
  12.     JkMount /*.action test1   
  13.     JkMount /* test1  
  14. </VirtualHost>  
  15. <Directory "D:\apache-tomcat-6.0.32\webapps\docs">  
  16.     Options Indexes FollowSymLinks  
  17.     AllowOverride None  
  18.     Order allow,deny  
  19.     Allow from all  
  20. </Directory>  
  21.   
  22.   
  23. <VirtualHost *:80>  
  24.     ServerName www.test2.com  
  25.     DocumentRoot "D:\apache-tomcat-6.0.33\webapps\examples"  
  26.     DirectoryIndex index.html index.htm index.jsp  
  27.     JkMount /servlet/* test2   
  28.     JkMount /*.jsp test2   
  29.     JkMount /*.htm test2   
  30.     JkMount /*.action test2   
  31.     JkMount /* test2  
  32. </VirtualHost>  
  33. <Directory "D:\apache-tomcat-6.0.33\webapps\examples">  
  34.     Options Indexes FollowSymLinks  
  35.     AllowOverride None  
  36.     Order allow,deny  
  37.     Allow from all  
  38. </Directory>  
  39.   
  40. LoadModule jk_module modules/mod_jk.so  
  41. JkWorkersFile conf/workers.properties  
  42. JkLogFile logs/mod_jk.log  
  43. JkLogLevel info  
 

3. 创建 <apache_home>/conf/workers.properties文件

 

Xml代码  
  1. #workers.tomcat_home=D:\apache-tomcat-6.0.33 #让mod_jk模块知道tomcat的位置  
  2. #workers.java_home=D:\Java\jdk1.6.0_16\jre #让mod_jk模块知道jre的位置  
  3. #ps=\  
  4. worker.list=test1,test2#模块版本  
  5. worker.test1.port=8009 #工作端口,若没占用则不用修改  
  6. worker.test1.host=www.test1.com #本机,若上面的Apache主机不为localhost,作相应修改  
  7. worker.test1.type=ajp13 #类型  
  8. worker.test1.lbfactor=1 #代理数,不用修改  
  9.   
  10. worker.test2.port=8109 #工作端口,若没占用则不用修改  
  11. worker.test2.host=www.test2.com #本机,若上面的Apache主机不为localhost,作相应修改  
  12. worker.test2.type=ajp13 #类型  
  13. worker.test2.lbfactor=1 #代理数,不用修改  
 

注:开头注释的三行,网上帖子说是加上,我看孙MM的书上没有,但我发现一个奇怪的问题,即使我注释掉这三行,在我的机器上也正常,但是如果删掉这三行,配置的日志 mod_jk.log 就报错了 ,如下

Xml代码  
  1. [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.  
  2. [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.  
  3. [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.  
  4. [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.  
  5. [Mon Oct 24 17:49:51.035 2011] [1496:3064] [info] init_jk::mod_jk.c (3252): mod_jk/1.2.32 () initialized  
  6. [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.  
  7. [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.  
  8. [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的第一行空着,也就是下面这样

Xml代码  
  1. #此行为空  
  2. worker.list=test1,test2#模块版本  
  3. worker.test1.port=8009 #工作端口,若没占用则不用修改  
  4. worker.test1.host=www.test1.com #本机,若上面的Apache主机不为localhost,作相应修改  
  5. worker.test1.type=ajp13 #类型  
  6. worker.test1.lbfactor=1 #代理数,不用修改  
  7.   
  8. worker.test2.port=8109 #工作端口,若没占用则不用修改  
  9. worker.test2.host=www.test2.com #本机,若上面的Apache主机不为localhost,作相应修改  
  10. worker.test2.type=ajp13 #类型  
  11. worker.test2.lbfactor=1 #代理数,不用修改  

 

启动apache又正常了,目前不得其解 。

 

4. 修改 Tomcat配置文件

 

AJP端口为8009的<Tomcat_HOME>/conf/server.xml配置

Xml代码  
  1. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />  
  2.   
  3. <Host name="www.test1.com" appBase="webapps"  
  4.            unpackWARs="true" autoDeploy="true"  
  5.            xmlValidation="false" xmlNamespaceAware="false">  
  6.             <Context path="" docBase="docs" reloadable="true" crossContext="true"/>  
  7.   
  8.        </Host>  

 

AJP端口为8109的<Tomcat_HOME>/conf/server.xml配置

Xml代码  
  1. <Connector port="8109" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />  
  2.   
  3. <Host name="www.test2.com" appBase="webapps"  
  4.            unpackWARs="true" autoDeploy="true"  
  5.            xmlValidation="false" xmlNamespaceAware="false">  
  6.             <Context path="" docBase="examples" reloadable="true" crossContext="true"/>  
  7.   
  8.        </Host>  

 

5. HOSTS配置

为了在本地测试,可以修改C:/Windows/system32/drivers/etc/HOSTS文件,增加本地域名解析

Xml代码  
  1. 127.0.0.1       www.test1.com  
  2. 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编码,例如

Xml代码  
  1. <Connector port="8080" protocol="HTTP/1.1"   
  2. connectionTimeout="20000" redirectPort="8443"  
  3. URIEncoding="UTF-8"  
  4. />  

但如果使用Apache作为前端Web服务器,那么就不会在使用Tomcat的HTTP端口了(即8080端口),这时需要在AJP端口指定编码

Xml代码  
  1. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />  
 

另外我有一个问题,如果使用apache+tomcat+mod_jk可以配置负载均衡,那如果又要配置虚拟主机,又要配置负载均衡,不知能否实现



你可能感兴趣的:(apache2.2.21+tomcat6+mod_jk在Windows中配置多域名对应单独IP虚拟主机)