http://hi.baidu.com/haven_blue/blog/item/277135f45e4b05cef3d3854f.html
前两天写了apache和tomcat整合的文章,但是整合成功后存在问题,就是不能在同host下解析jsp 和php! 今天,网上找了很多资料,还是没有一个具体的解决方案!于是自己试验创建不同的vhost,先尝试把php和jsp放在不同的vhost下看是否能解析,然后再把php和jsp放在同一vhost下看能否解析!这里是在apache tomcat整合成功的条件下对apache和tomcat设置进行修改的,apache和tomcat整合请看我前两天的文章《Apache tomcat整合》,OK接下来就是具体的实现步骤:
首先,apache加载vhost模块。
1. 把#LoadModule vhost_alias_module modules/mod_vhost_alias.so前面的#号去了。
2.把
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
改成:
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
导入vhost配置文件。
修改apache conf/extra目录下的httpd-vhosts.conf文件,创建vhost,我的文件内容如下(这个文件是最终版本可以实现同域名下jsp,servlet和php的访问):
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin admin@kyle-ming.net
DocumentRoot "D:/program files/Apache Software Foundation/tomcat-6/webapps"
ServerName www.kyle-ming.net
ErrorLog logs/kyle-ming_error.log
CustomLog logs/kyle-ming.log common
<Directory "D:/program files/Apache Software Foundation/tomcat-6/webapps">
DirectoryIndex index.html index.jsp index.htm
# Options -Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
JkMount /* ajp13
JkUnMount /*.html ajp13
JkUnMount /*.php ajp13
JkUnMount /*.gif ajp13
JkUnMonut /*.jpeg ajp3
JkUnMonut /*.jpg ajp3
JkUnMount /*.swf ajp13
JkUnMount /*.bmp ajp13
JkUnMount /*.png ajp13
JkUnMount /*.css ajp13
</VirtualHost>
<VirtualHost *:80>
#ServerAdmin admin@php-test.net
DocumentRoot "D:\program files\Apache Software Foundation\Apache2.2\htdocs\phpzd\test"
ServerName www.php-test.net
ErrorLog logs/php-test_error.log
CustomLog logs/php-test.log common
<Directory "D:\program files\Apache Software Foundation\Apache2.2\htdocs\phpzd\test">
DirectoryIndex index.html index.php index.htm
Options -Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
在这里我创建了两个vhost分别是www.kyle-ming.net 和www.php-test.net ,www.kyle-ming.net这个vhost是放jsp文件的,而www.php-test.net是存放的是php文件。
这里要注意的是www.kyle-ming.net中的JkMount 和JkUnMount,他们决定那些文件或者文件夹交由tomcat处理,那些直接由apache处理,而且JkUnMont的优先级比JkMount高。我这里写的规则的组合起来就是除去html文档,图片(gif,jpeg,jpg,png,bmp),falsh文件(swf),和php文档以外的其他文档都交由tomcat处理!这些规则一定要写在需要整合的vhost上。
还有由于servlet的url-pattern不统一干脆来个 JkMount /* ajp13来处理所有要交由tomcat处理的匹配文件。之前没有用这个规则,觉得这样就把所有的东西都交由tomcat处理了,这样没有发挥apache处理静态页面的优势,就用了一下规则:
#JkMount /servlet/* ajp13
#让Apache支持对servlet传送,用以Tomcat解析
#JkMount /*.jsp ajp13
#让Apache支持对jsp传送,用以Tomcat解析
#JkMount /*.do ajp13
但是这样一来很多servlet就不能访问了提示没有该路径,原因servlet没有交由到tomcat处理,而是由apache处理,结果apache不认tomcat中的web.xml配置中servlet 的 url-pattern。
后来了解都JkUnMount的优先级比JkMount的高,于是就改用了JkMount /* ajp13 servlet也就可以解析了。还有就是 JkUnMount /*.php ajp13也是最后测试的时候jsp 和 php在不同vhost下可以解析的情况下,然后尝试在同一vhost下看是否能解释而添加进去的。很幸运测试也成功了!
最后tomcat的server.xml文件也要修改下,把
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
改成:
<Host name="www.kyle-ming.net" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="/ROOT"/>
当然在测试的时候还要修改host文件啦,我是在windows下测试的,修改系统盘下的Windows\System32\drivers\etc目录中的hosts文件,在hosts下添加:
127.0.0.1 www.kyle-ming.net
127.0.0.1 www.php-test.net
配置基本完成!下面是测试!
测试的时候,我用的是tomcat webapps的目录作为www.kyle-ming.net的根目录,在浏览器直接敲入 www.kyle-ming.net就能访问tomcat的安装成功页面,然后接入servlet examples中测试servlet也是成功的!如图:
测试www.kyle-ming.net访问php文件,在D:/program files/Apache Software Foundation/tomcat-6/webapps下创建phpinfo.php文件,内容如下:
<?php
phpinfo();
?>
在浏览器地址栏输入 www.kyle-ming.net/phpinfo.php,测试结果如图:
测试成功!
最后测试 www.php-test.net ,把刚刚的phpinfo.php文件拷贝到www.php-test.net的根目录,在浏览器地址栏输入www.php-test.net/phpinfo.php,测试成功,结果如下图:
ps:在测试的前要重启tomcat和apache,每次改完配置都要重启tomcat和apache!之前也试过修改了配置只是重启了tomcat或者apache当解析php文件时会直接下载文件!
以上是参考网上资料自己亲身测试所得,文章写的有点乱!如果你有什么疑问或者你有更好的解决方案欢迎留言!我会尽快回复!
若想 转载文章
作者:kyle



没有评论:
发表评论