• tomcat整合apache


    历时4个多小时,最终把tomcat与apache整合起来了。

    中间出了各种各样的问题,现记录一下,也希望能对后来者有点帮助。


    背景

    apache与tomcat的差别联系大家都知道:
    tomcat能处理jsp页面,也能处理html页面
    apache仅仅能处理静态资源,如html页面,图片,js等等,并且apache处理html页面比tomcat处理html的速度快。


    那为了提升整个系统的訪问速度。
    我们就把apache与tomcat整合到一起,我们发的全部请求都是先给apache,假设详细的请求是html(还包含.jpg,.js等静态资源)就直接让apache处理,假设是jsp或servlet等动态信息,就交给tomcat处理。


    下载与安装

    jdk 1.7
    tomcat 6  (tomcat7在整合中似乎有些问题,大家就用tomcat6吧)
    apache 2.2.4
    mod_jk 这就是把apache无法处理的动态请求发送给tomcat的东西。 这里要注意,mod_jk的版本号一定要与apache的版本号匹配
    我建议大家就直接在百度上搜 "mod_jk-1.2.26-httpd-2.2.4" 或者去http://download.csdn.net/download/wng1978/6708623 这里直接下载
    我一直强调版本号问题,就是由于我自己下载的各种组件的版本号不匹配,中间浪费了非常多时间。

    因此,我再说句题外话

    大家在新接触一个东西时,特别是还处在搭环境的阶段的时候,下载的各个组件最好就依照你所阅读的那个文章所说的版本号,这样至少不会出现版本号冲突的问题。

    刚開始学习的人,一旦碰到这样的版本号问题,是非常打击积极性的。




    整合

    mod_jk

    解压缩mod_jk-1.2.26-httpd-2.2.4.rar,得到mod_jk-1.2.26-httpd-2.2.4.so,将它改名为mod_jk.so后放到apache的安装文件夹下的modules中。

    编辑apache/conf/httpd.conf文件

      找到Listen 80这一行( ctrl+f )改动为 Listen 81

      在httpd.conf的最后加上

     
     # 设置虚拟主机,定义port为81
     <VirtualHost 127.0.0.1:81>
         ServerName 127.0.0.1
         #定义服务名称 E:/apache-tomcat-6.0.44-8500/webapps 是我的tomcat的位置
         DocumentRoot "E:/apache-tomcat-6.0.44-8500/webapps"
         #定义站点项目所在路径,把路径指向 tomcat 中的默认站点文件夹
         DirectoryIndex index.html index.htm index.jsp
         ErrorLog logs/shsc-error_log.txt
       
         ##以下样例中的ajp13,请大家记住,后面咱们还要用
         CustomLog logs/shsc-access_log.txt common
         #样例1,让 Apache 支持对webapps/sun.shop/blog 中页面传送
         JkMount /sun.shop/blog/* ajp13
         #样例2,向Apache请求此文件夹内页面时。系统将转向用Tomcat解析
         JkMount /*.jsp ajp13
       
         #样例4。向 Apache 请求jsp页面时,用 Tomcat 进行解析
         JkMount /*.do ajp13
         #样例5,向 Apache 请求.do 动作时。 用 Tomcat 进行解析
         JkMount /*.action ajp13
         #样例6,向 Apache 请求 .action 动作时, 用 Tomcat 进行解析
    
    
     </VirtualHost>
     
     # 同意client訪问此路径 
     <Directory "E:/apache-tomcat-6.0.44-8500/webapps">  
         Options Indexes FollowSymLinks  
         AllowOverride None  
         Order allow,deny  
         Allow from all  
     </Directory>  

    说实话,我不知道Directory后面那个文件夹与virtualhost里面那个documentroot中的文件夹有什么差别联系

    眼下,我设置这个两个路径一直,都是tomcat下的webapps


    到这一步后,我们先检查一下,apache是否已经安装好了。


    检查

    我已经在E:/apache-tomcat-6.0.44-8500/webapps 下部署了一个叫PathTest的项目,根文件夹下有个index.html文件。
    http://localhost:81/PathTest/
    在浏览器中输入上面的地址。



    换一个地址

    假设你的浏览器也能出现类似上面的效果,说明apache本身已经安装好了。


    连接tomcat

    将apache连接到tomcat上

     再给httpd.conf后面加上下面内容


     LoadModule jk_module modules/mod_jk.so
     # 此处 mod_jk.so 文件为你下载的文件
     JkWorkersFile "E:/apache-tomcat-6.0.44-8500/conf/workers.properties"
     # 指定tomcat监听配置文件地址
     JkLogFile "E:/apache-tomcat-6.0.44-8500/logs/mod_jk2.log"
     # 指定日志存放位置
     JkLogLevel info

    上面tomcat的地址大家依据自己的修改一下就可以。

    设定tomcat

    设定tomcat那边怎样接受apache的请求。

         在上一步里我们有这种配置
         JkWorkersFile "E:/apache-tomcat-6.0.44-8500/conf/workers.properties"
         在那么去tomcat的conf文件夹下看看,并没有workers这个文件,怎么办?新建一个就能够了嘛。并写入例如以下内容:


    workers.tomcat_home=E:apache-tomcat-6.0.44-8500 #让mod_jk模块知道Tomcat的位置
    workers.java_home=C:Program FilesJavajre7 #让mod_jk模块知道jre的位置
    ps=
    worker.list=ajp13 #模块版本号
    worker.ajp13.port=8009 #工作端口,若没占用则不用改动 
    worker.ajp13.host=localhost #本机,若上面的Apache主机不为localhost,作对应改动
    worker.ajp13.type=ajp13 #类型
    worker.ajp13.lbfactor=1 #代理数,不用改动


    大家看这一行
    worker.list=ajp13 #模块版本号
    这个ajp13和httpd.conf中的 JkMount /sun.shop/blog/* ajp13 的ajp13 是相应的
    你把两处的ajp13改成"mytomcat"也是能够的。


    还有 worker.ajp13.port=8009 这个port指的是tomcat中ajp协议的port,不是我们经经常使用的那个支持http的8080。


    换句话说这个8009,最好就不要改。


    另外,我的tomcat的port号改成了8500。
    在什么地方改?




    在tomcat/conf/server.xml下

        <Connector port="8500" protocol="HTTP/1.1" 
                   connectionTimeout="20000" 
                   redirectPort="8443" />
       
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    8500与8009分别支持两种协议。




    OK,如今我们试一试。
    开启tomcat,訪问 http://localhost:8500/PathTest/jsp/a.jsp
    是一个非常easy的jsp
    开启apache,
    对了还没有说怎么开启apache服务呢。


    在apache/bin下有个ApacheMonitor。

    双击



    选定服务后,start就可以。
    然后訪问  http://localhost:81/PathTest/jsp/a.jsp
    注意,我们的port号是81,是訪问apache的。
    apache看到请求的地址是jsp,就通过JkWorkersFile找到apache后面的tomcat,tomcat处理后,再把结果给apache,然后apache再给浏览器。
    假设http://localhost:81/PathTest/jsp/a.jsp 和 http://localhost:8500/PathTest/jsp/a.jsp 的返回结果一样。
    就说明apache与tomcat整合完成。






    可能出现的问题

    1 启动apache的时候 弹出这个错误 the requested operation has failed
      假设不是port问题的话,那么就是httpd.conf被我们改动错了。


      怎么办

      命令行内进入安装文件夹apachein。使用命令httpd -t。然后出现“Syntax error on line 133 of E:/apacheconf/httpd.conf :ServerAdmin takes one argument, the email address of the server administrator”,看它提示信息,说明,在这个配置文件中面的133行,出现了问题

    上面的133行错误是什么意思呢?

    给后面加上一个地址就OK

    2 上面的配置中,我们在81port,訪问html,jsp,js,jpg都是没有问题的,深入甚至增加mvc框架后的.do,.action都能够正常处理。
      但是我们假设訪问的是servlet呢?
      眼下没有特别好的方法。


      给httpd.conf下的VirtualHost里面加上这个
      JkMount /*/servlet/* ajp13 
      这是什么意思?


      假设请求的url中间包括"servlet"这个字符,apache就把它发给tomcat。


    这篇文章參考了非常多博客,详细參考信息就不一一列出了

  • 相关阅读:
    [设计模式]暂时不考虑多线程的单例模式
    [设计模式]策略模式
    [设计模式]工厂模式
    [设计模式]观察者模式1(用JDK提供的API)
    使用visual studio 2013 快速搭建phonegap开发环境
    js日期计算及快速获取周、月、季度起止日
    HTTP 错误 500.21
    C# 实现对网站数据的采集和抓取
    js设置控件的隐藏与显示的两种方法
    jQuery操作checkbox选择
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6855532.html
Copyright © 2020-2023  润新知