3.2.4. 新建www.a.com.conf文件
位置:$apache_base/conf/vhost/www.a.com.conf
加入以下代码(根据情况做相应修改)
- #设置虚拟主机
- <VirtualHost *:80>
- ServerAdmin www.a.com
- DocumentRoot E:\\a\\
- ServerName www.a.com
- DirectoryIndex index.html
- ErrorLog logs/a-error_log.txt
- # 根目录,能访问所有
- <Directory E:\\a\\/>
- Options FollowSymLinks
- AllowOverride None
- Order deny,allow
- allow from all
- </Directory>
- # WEB-INF 目录,禁止访问
- <Directory E:\\a\\WEB-INF>
- deny from all
- </Directory>
- # META-INF 目录,禁止访问
- <Directory E:\\a\\/META-INF>
- deny from all
- </Directory>
- # 下面配置为静态资源全部交由apache处理,其他资源由tomcat处理
- JkMount /* a_worker
- JkUnmount /*.jpg a_worker
- JkUnmount /*.png a_worker
- JkUnmount /*.gif a_worker
- JkUnmount /*.bmg a_worker
- JkUnmount /*.html a_worker
- JkUnmount /*.htm a_worker
- #JkUnmount /*.js a_worker
- JkUnmount /*.css a_worker
- JkUnmount /*.xml a_worker
- JkUnmount /*.swf a_worker
- </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 项目的虚拟主机配置
- <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
- </Host>
- <Host name="www.a.com" appBase="webapps">
- <Context path="" docBase="E:\\a\\" />
- </Host>
- <Host name="www.b.com" appBase="webapps">
- <Context path="" docBase="E:\\b\\" />
- </Host>
workers.properties 文件
增加一个worker 配置
- worker.list=a_worker,b_worker
- worker.a_worker.port=8009
- worker.a_worker.host=www.a.com
- worker.a_worker.type=ajp13
- worker.a_worker.socket_keepalive=True
- worker.b_worker.port=8009
- worker.b_worker.host=www.b.com
- worker.b_worker.type=ajp13
- worker.b_worker.socket_keepalive=True
httpd.conf 文件
导入虚拟主机文件
- # 虚拟主机配置
- NameVirtualHost *:80
- Include conf/vhost/www.a.com.conf
- Include conf/vhost/www.b.com.conf
重新启动tomcat 和apache 。都成功则apache+tomcat 整合多个项目完成。
4.apache + tomcat + mod_proxy_ajp
mod_proxy_ajp是apache自带的ajp协议代理模块,只需要在apache配置文件中启用就能使用,无需下载。
注意:下面将的配置跟 3. 节讲的配置可能完全不一样。这两个版本之前最好先做一下原始备份,不然两种配置版本混合在一起可能造成冲突,带给自己不必要的麻烦。
4.1. 配置tomcat
这里没什么特别的地方,跟3.1. 节一样
注意:使用mod_proxy_ajp 可以使用tomcat的虚拟目录的配置方式
- <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
- <!-- a 项目 -->
- <Context path="/a" docBase="C:\\data\\a\\" sessionCookiePath=”/” />
- <!-- b 项目 -->
- <Context path="/b" docBase="C:\\data\\a\\" sessionCookiePath=”/” />
- </Host>
注意:上面的sessionCookiePath属性配置成“/”值的作用要说明一下。配置tomcat的虚拟目录,会导致项目中session的cookie的path字段跟context的path字段一致。如果只用tomcat就不会出现问题,只要跟其他web服务器整合时,访问contextpath就会变成“”””或“”/””,就跟tomcat的session cookie path不一致,会导致session无效。所以必须将tomcat的sessionCookiePath设置为“/”。
加不加这个属性的区别只需使用chrome,firefox浏览器查看响应头就清楚了。
4.2. 配置apache
mod_proxy_ajp是apache自带的ajp协议代理模块,只需要在apache配置文件中启用就能使用,无需下载
4.2.1. 配置httpd.conf
找到本文件中的下面加载模块代码,将前面的注释去掉
- # 启用 ajp 代理
- LoadModule proxy_module modules/mod_proxy.so
- LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
文件最后面继续导入虚拟主机配置
- # 虚拟主机配置
- NameVirtualHost *:80
- Include conf/vhost/www.a.com.conf
- Include conf/vhost/www.b.com.conf
4.2.2. 配置www.a.com.conf
这个文件跟3.2.4. 节最大的区别就是模块的不同(绿色部分)
- #设置虚拟主机
- <VirtualHost *:80>
- DocumentRoot C:\\data\\a\\
- ServerName www.a.com
- DirectoryIndex index.html
- ErrorLog logs/a-error_log.txt
- # 根目录,能访问所有
- <Directory C:\\data\\a\\>
- Options FollowSymLinks
- AllowOverride None
- Order deny,allow
- allow from all
- </Directory>
- # WEB-INF 目录,禁止访问
- <Directory C:\\data\\a\\WEB-INF>
- deny from all
- </Directory>
- # META-INF 目录,禁止访问
- <Directory C:\\data\\a\\META-INF>
- deny from all
- </Directory>
- # 下面配置为静态资源全部交由apache处理,其他资源由tomcat处理
- ProxyPassMatch .*\.jpg !
- ProxyPassMatch .*\.png !
- ProxyPassMatch .*\.gif !
- ProxyPassMatch .*\.bmg !
- ProxyPassMatch .*\.html !
- ProxyPassMatch .*\.htm !
- ProxyPassMatch .*\.js !
- ProxyPassMatch .*\.css !
- ProxyPassMatch .*\.xml !
- ProxyPassMatch .*\.xml !
- ProxyPass / ajp://localhost:8009/a/
- ProxyPa***everse / ajp://localhost:8009/a/
- </VirtualHost>
4.2.3. 配置www.b.com.conf
与www.a.com.conf 文件类似
配置完成后,重启tomcat 和apache ,页面又能访问了。
5.后记
同学的多个web 项目还是不能使用tomcat 的虚拟目录方式发布,可能是他的struts2 设置了contextpath ,导致重定向时路径出错。所以我帮同学的弄的还是tomcat 虚拟主机的配置方式。
本文也做我的整合备忘文档吧。