页面

2011年5月12日星期四

Apache Tomcat 整合php jsp 在相同vhost下可以正常解析

转自我的百度博客:
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模块。
    修改httpd.conf文件:

            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

没有评论:

发表评论