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 的作用,合理规划目录结构,充分利用禁止转发功能。

  • 相关阅读:
    ubuntu 搜索文件方法(find命令)
    tomcat ip访问
    Linux下tomcat 的启动 关闭 kill
    Hibernate 之 使用
    tar 用法
    ubuntu下配置django+apache+mysql+mod_python+Python
    Windows Mobile Ping 命令实现(转)
    C#异步方法调用(四大方法详解)
    HTML基础(一):HTML简介
    windows2003系统的iis不能下载exe文件
  • 原文地址:https://www.cnblogs.com/happyday56/p/6025463.html
Copyright © 2011-2022 走看看