3.2.4.            新建www.a.com.conf文件

位置:$apache_base/conf/vhost/www.a.com.conf
 
加入以下代码(根据情况做相应修改)
 
 
  
  1. #设置虚拟主机 
  2. <VirtualHost *:80> 
  3.        ServerAdmin www.a.com 
  4.  
  5.        DocumentRoot E:\\a\\ 
  6.  
  7.        ServerName www.a.com 
  8.  
  9.        DirectoryIndex index.html 
  10.  
  11.        ErrorLog logs/a-error_log.txt 
  12.  
  13.   
  14.        # 根目录,能访问所有 
  15.  
  16.        <Directory E:\\a\\/> 
  17.  
  18.            Options FollowSymLinks 
  19.            AllowOverride None 
  20.            Order deny,allow 
  21.            allow from all 
  22.  
  23.        </Directory> 
  24.   
  25.        # WEB-INF 目录,禁止访问 
  26.  
  27.        <Directory E:\\a\\WEB-INF> 
  28.  
  29.            deny from all 
  30.        </Directory> 
  31.   
  32.        # META-INF 目录,禁止访问 
  33.  
  34.        <Directory E:\\a\\/META-INF> 
  35.  
  36.            deny from all 
  37.        </Directory> 
  38.   
  39.   
  40.        # 下面配置为静态资源全部交由apache处理,其他资源由tomcat处理 
  41.  
  42.        JkMount /* a_worker 
  43.   
  44.        JkUnmount /*.jpg a_worker 
  45.        JkUnmount /*.png a_worker 
  46.        JkUnmount /*.gif a_worker 
  47.        JkUnmount /*.bmg a_worker 
  48.        JkUnmount /*.html a_worker 
  49.        JkUnmount /*.htm a_worker 
  50.        #JkUnmount /*.js a_worker 
  51.        JkUnmount /*.css a_worker 
  52.        JkUnmount /*.xml a_worker 
  53.        JkUnmount /*.swf a_worker 
  54.   
  55. </VirtualHost> 
 
 
说明:
同学的网站使用了struts2 框架,但不知道匹配规则是啥,所以我就配置所有请求都通过tomcat 处理,下面的静态资源配置则通过apache 处理。而且同学使用了dwr 框架,好像js 文件不能通过apache 处理,所有js 那个就注释掉了。
 
 
都配置完成了。重启apache 服务,不出错就说明配置没问题了。
 
访问域名www.a.com (如果没做dns 解析的就修改hosts 文件吧)。
 
OK ,成功了。
 
3.3.    多个web项目
 
如果这台服务器的一个tomcat 运行着多个web 项目时。如果还想用到mok_jk 模块,就只能使用tomcat 的虚拟主机了。配置大致相同。
 
tomcat server.xml 文件
将之前的Context 删掉,加入两个web 项目的虚拟主机配置
 

 

 
  
  1. <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> 
  2. </Host> 
  3.  
  4. <Host name="www.a.com" appBase="webapps"> 
  5.         <Context path="" docBase="E:\\a\\" /> 
  6. </Host> 
  7.          
  8. <Host name="www.b.com" appBase="webapps"> 
  9.         <Context path="" docBase="E:\\b\\" /> 
  10. </Host> 

workers.properties 文件

增加一个worker 配置
 
 
 
  
  1. worker.list=a_worker,b_worker 
  2.   
  3. worker.a_worker.port=8009 
  4. worker.a_worker.host=www.a.com 
  5. worker.a_worker.type=ajp13 
  6. worker.a_worker.socket_keepalive=True 
  7.   
  8. worker.b_worker.port=8009 
  9. worker.b_worker.host=www.b.com 
  10. worker.b_worker.type=ajp13 
  11. worker.b_worker.socket_keepalive=True 
 

httpd.conf 文件

导入虚拟主机文件
 
 
  
  1. # 虚拟主机配置 
  2. NameVirtualHost *:80 
  3.   
  4. Include conf/vhost/www.a.com.conf 
  5. Include conf/vhost/www.b.com.conf 
 
 
 
重新启动tomcat apache 。都成功则apache+tomcat 整合多个项目完成。
 
4.apache + tomcat + mod_proxy_ajp
 

mod_proxy_ajpapache自带的ajp协议代理模块,只需要在apache配置文件中启用就能使用,无需下载。

 
注意:下面将的配置跟 3. 节讲的配置可能完全不一样。这两个版本之前最好先做一下原始备份,不然两种配置版本混合在一起可能造成冲突,带给自己不必要的麻烦。
 
4.1.    配置tomcat
 
这里没什么特别的地方,跟3.1. 节一样

注意:使用mod_proxy_ajp 可以使用tomcat的虚拟目录的配置方式

 
 
  
  1. <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"
  2.          
  3.         <!-- a 项目 --> 
  4.         <Context path="/a" docBase="C:\\data\\a\\" sessionCookiePath=”/” /> 
  5.          
  6.         <!-- b 项目 --> 
  7.         <Context path="/b" docBase="C:\\data\\a\\" sessionCookiePath=”/” /> 
  8. </Host> 
 

注意:上面的sessionCookiePath属性配置成“/”值的作用要说明一下。配置tomcat的虚拟目录,会导致项目中sessioncookiepath字段跟contextpath字段一致。如果只用tomcat就不会出现问题,只要跟其他web服务器整合时,访问contextpath就会变成“”””或“”/””,就跟tomcatsession cookie path不一致,会导致session无效。所以必须将tomcatsessionCookiePath设置为“/”。

 
 

加不加这个属性的区别只需使用chromefirefox浏览器查看响应头就清楚了。

 
4.2.    配置apache
 

mod_proxy_ajpapache自带的ajp协议代理模块,只需要在apache配置文件中启用就能使用,无需下载

 
4.2.1.            配置httpd.conf
 
找到本文件中的下面加载模块代码,将前面的注释去掉
 
 
 
  
  1. # 启用 ajp 代理 
  2. LoadModule proxy_module modules/mod_proxy.so 
  3. LoadModule proxy_ajp_module modules/mod_proxy_ajp.so 
 
文件最后面继续导入虚拟主机配置
 
 
 
  
  1. # 虚拟主机配置 
  2. NameVirtualHost *:80 
  3.   
  4. Include conf/vhost/www.a.com.conf 
  5. Include conf/vhost/www.b.com.conf 
 
 
4.2.2.            配置www.a.com.conf
这个文件跟3.2.4. 节最大的区别就是模块的不同(绿色部分)
 
 
 
  
  1. #设置虚拟主机 
  2. <VirtualHost *:80> 
  3.        DocumentRoot C:\\data\\a\\ 
  4.  
  5.        ServerName www.a.com 
  6.  
  7.        DirectoryIndex index.html 
  8.  
  9.        ErrorLog logs/a-error_log.txt 
  10.  
  11.   
  12.        # 根目录,能访问所有 
  13.  
  14.        <Directory C:\\data\\a\\> 
  15.  
  16.            Options FollowSymLinks 
  17.            AllowOverride None 
  18.            Order deny,allow 
  19.            allow from all 
  20.        </Directory> 
  21.   
  22.        # WEB-INF 目录,禁止访问 
  23.  
  24.        <Directory C:\\data\\a\\WEB-INF> 
  25.  
  26.            deny from all 
  27.        </Directory> 
  28.   
  29.        # META-INF 目录,禁止访问 
  30.  
  31.        <Directory C:\\data\\a\\META-INF> 
  32.  
  33.            deny from all 
  34.        </Directory> 
  35.   
  36.   
  37.        # 下面配置为静态资源全部交由apache处理,其他资源由tomcat处理 
  38.  
  39.        ProxyPassMatch .*\.jpg ! 
  40.        ProxyPassMatch .*\.png ! 
  41.        ProxyPassMatch .*\.gif ! 
  42.        ProxyPassMatch .*\.bmg ! 
  43.        ProxyPassMatch .*\.html ! 
  44.        ProxyPassMatch .*\.htm ! 
  45.        ProxyPassMatch .*\.js ! 
  46.        ProxyPassMatch .*\.css ! 
  47.        ProxyPassMatch .*\.xml ! 
  48.        ProxyPassMatch .*\.xml ! 
  49.        
  50.        ProxyPass / ajp://localhost:8009/a/ 
  51.        ProxyPa***everse / ajp://localhost:8009/a/ 
  52.   
  53. </VirtualHost> 
 
4.2.3.            配置www.b.com.conf
 
www.a.com.conf 文件类似
 
 
配置完成后,重启tomcat apache ,页面又能访问了。
 
 
 
5.后记
 
同学的多个web 项目还是不能使用tomcat 的虚拟目录方式发布,可能是他的struts2 设置了contextpath ,导致重定向时路径出错。所以我帮同学的弄的还是tomcat 虚拟主机的配置方式。
 
本文也做我的整合备忘文档吧。