zoukankan      html  css  js  c++  java
  • Apache和tomcat服务器使用ajp_proxy模块

    首先我们先介绍一下为什么要让Apache与Tomcat之间进行连接。事实上Tomcat本身已经提供了HTTP服务,该服务默认的端口是8080,装好tomcat后通过8080端口可以直接使用Tomcat所运行的应用程序,你也可以将该端口改为80。

    既然Tomcat本身已经可以提供这样的服务,我们为什么还要引入Apache或者其他的一些专门的HTTP服务器呢?原因有下面几个:

    1. 提升对静态文件的处理性能;

    2. 利用Web服务器来做负载均衡以及容错;

    3. 无缝的升级应用程序。

    这三点对一个web网站来说是非常之重要的,我们希望我们的网站不仅是速度快,而且要稳定,不能因为某个Tomcat宕机或者是升级程序导致用户访问不了,而能完成这几个功能的比较好的HTTP服务器是 apache 的 http server了,它跟tomcat的结合是最紧密和可靠的。

    在Apache2.2之前,一般有两个组件可选择。mod_jk和mod_jk2。后来mod_jk2由于没有开发人员的支持,没更新了,转而更新mod_jk,所以现在一般都使用mod_jk做Apache和Tomcat的连接器。要指出的是mod_jk支持 Apache 1.x和2.X系列。

    不过,自从Apache2.2出来后,又多了两种种选择,那就是 proxy-ajp 和 http-proxy。大家知道Apache里的proxy模块,可以实现双向代理功能,功能非常强大。其实从连接器的实现原理上来说,用proxy模块来实现是非常自然的。proxy模块的功能无非就是把相关的请求发给特定的主机再返回结果。那连接器的功能需求就是要把所有对Servlet/JSP的请求都转给后台的Tomcat。而且所FreeBSD邮件列表上说,使用proxy-ajp要比 mod_jk的效率要高。看来,使用Apache自带模块,要比另外编译的来得可靠。

    既然有了ajp_proxy 专门的 ajp 协议代理,http-proxy 就没有必要使用这种方法了。

    我主要测试成功了ajp_proxy ,http-proxy没有测试,jk 配置了一整天,没有成功,但是把主要过程附在后面,在必须要用 jd 这种方法时,作为参考。

    环境: apache 2.2.4,tomcat 5.5,jdk1.5,winxpsp2

    apache 2.2 及后续版本,在配置文件上面进行了调整,把一些配置繁琐的设置独立出来,在需要的时候再包含进主配置文件,以简化 httpd.conf 的文件管理。

    一. ajp_proxy (重点采取的方法)

    1. 开启代理模块

    httpd.conf 文件中

    #LoadModule proxy_module modules/mod_proxy.so

    #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

    #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

    引入虚拟主机文件

    # Virtual hosts

    #Include conf/extra/httpd-vhosts.conf

    去掉 #

    2. 配置 ajp-proxy

    为了针对不同的虚拟主机做不同的配置策略,把 ajp-proxy 的配置写在每个虚拟主机配置文件中,而不要写在全局配置中。

    Apache2.2/conf/extra/httpd-vhosts.conf 文件中

    #

    # Use name-based virtual hosting.

    #

    NameVirtualHost *:80

    #

    # VirtualHost example:

    # Almost any Apache directive may go into a VirtualHost container.

    # The first VirtualHost section is used for all requests that do not

    # match a ServerName or ServerAlias in any <VirtualHost> block.

    #

    # proxy 实现代理

    # 实现 www.code.com 虚拟主机

    <VirtualHost *:80>

        ServerAdmin webmaster@code.com

        DocumentRoot E:/program/www/www.code.com

        ServerName www.code.com

        ServerAlias code.com

      

       # 不需要代理的,apache 直接解析目录,用"!"

       # 顺序很重要,您需要把拒绝指令放置在普通ProxyPass指令之前

       ProxyPass /images/ !

       ProxyPass /css/ !

       ProxyPass /js/ !

       ProxyPass /php/ !

       # 转发所有非禁止的请求

       ProxyPass / ajp://127.0.0.1:8009/

       ProxyPassReverse / ajp://127.0.0.1:8009/

      

       #转发指定目录的请求

       #ProxyPass /jsp/ ajp://127.0.0.1:8009/jsp/

       #ProxyPassReverse /jsp/ ajp://127.0.0.1:8009/jsp/

       #ProxyPass /servlet/ ajp://127.0.0.1:8009/servlet/

       #ProxyPassReverse /servlet/ ajp://127.0.0.1:8009/servlet/

       #负载均衡,未测试

       #ProxyPass / balancer://example/

       #<Proxy balancer://example/>

       #BalancerMember ajp://server1:8080/

       #BalancerMember ajp://server2:8080/

       #BalancerMember ajp://server3:8080/

       #</Proxy>

      

        # logs

        # 一定要保证 E:/program/www/www.code.com/logs/httpd/ 目录存在,否则 apache 不能启动

        ErrorLog E:/program/www/www.code.com/logs/httpd/www.code.com_log

        CustomLog E:/program/www/www.code.com/logs/httpd/www.code.com_log common

       # 允许apache访问虚拟主机所在的目录   

        <Directory "E:/program/www/www.code.com">

            Options Indexes FollowSymlinks MultiViews

            AllowOverride None

            Order allow,deny

            Allow from all

        </Directory>

       # 禁止apache访问虚拟主机所在的目录中的WEB-INF目录

       # 由于上述设定了转发所有的请求,tomcat 自然不会访问此目录,但也加在这里,用以明显申明。

        <Directory ~ "/WEB-INF/">

         Order deny,allow

         Deny from all

       </Directory>

       # 禁止apache访问虚拟主机所在的目录中的META-INF目录

       # 由于上述设定了转发所有的请求,tomcat 自然不会访问此目录,但也加在这里,用以明显申明。

       <Directory ~ "/META-INF/">

         Order deny,allow

         Deny from all

       </Directory>

    </VirtualHost>

    apache-tomcat-5.5.17/conf/server.xml 中

    <Host name="www.code.com" debug="0" appBase="E:/program/www/"

       unpackWARs="true" autoDeploy="true"

       xmlValidation="false" xmlNamespaceAware="false">     

    <Logger className="org.apache.catalina.logger.FileLogger"

               directory="E:/program/Apache2.2/logs/httpd" prefix="standard_log." suffix=".txt"

          timestamp="true"/>

               

          <Context

          path="" docBase="E:/program/www/code.com" debug="1" privileged="true" reloadable="true">

        </Context>

         

    </Host>

    说明:

    1. 为了针对不同的虚拟主机做不同的配置策略,把 ajp-proxy 的配置写在每个虚拟主机配置文件中,而不要写在全局配置文件 httpd.conf 中。当启用虚拟主机配置文件 httpd-vhosts.conf 之后,主配置文件 httpd.conf 中的主机配置被替代,即只能访问 httpd-vhosts.conf 中配置的虚拟主机。

    2. 虚拟主机的目录设置结构尽量清晰,如 /www 为所有虚拟主机的根目录的上级目录,各个虚拟主机的根目录都在 www 下面,如 www.code.com 虚拟主机的根目录为 /www/www.code.com。这样设置也方便 tomcat 虚拟主机设置(具体见 tomcat 设置文章)。

    3. 相应的,tomcat 中也要设置对应的虚拟主机,才可以正确转发。

    (故 http://www.code.com   和 http://www.code.com:8080 会访问同一个虚拟主机目录)

    (修改 http://localhost:8080 的虚拟主机的内容,设置一个欢迎界面,代替默认的首页)

    4. 为了简化配置工作,可把转发设置为全部转发;

    5. 为了充分发挥 apache 的作用,合理规划目录结构,充分利用禁止转发功能。

  • 相关阅读:
    hdu 5366 简单递推
    hdu 5365 判断正方形
    hdu 3635 并查集
    hdu 4497 数论
    hdu5419 Victor and Toys
    hdu5426 Rikka with Game
    poj2074 Line of Sight
    hdu5425 Rikka with Tree II
    hdu5424 Rikka with Graph II
    poj1009 Edge Detection
  • 原文地址:https://www.cnblogs.com/happyday56/p/6025463.html
Copyright © 2011-2022 走看看