开发者社区> 老先生二号> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

分类: linux

本文转自快乐就好博客园博客,原文链接:http://www.cnblogs.com/happyday56/p/6025463.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
重磅!Apache Flink 1.11 功能前瞻抢先看!
Flink 1.11 版本即将正式宣告发布!为满足大家的好奇与期待,我们邀请 Flink 核心开发者对 1.11 版本的功能特性进行解读与分享。Flink 1.11 在 1.10 的基础上对许多方面进行了完善和改进,并致力于进一步提高 Flink 的可用性及性能。
16640 0
Apache Flink 进阶(五):数据类型和序列化
本文根据 Apache Flink 系列直播整理而成,由 Apache Flink Contributor、360 数据开发高级工程师马庆祥老师分享。文章主要从如何为Flink量身定制的序列化框架、Flink序列化的最佳实践、Flink通信层的序列化以及问答环节四部分分享。
2523 0
Apache Flink 进阶入门(二):Time 深度解析
时间属性是流处理中最重要的一个方面,是流处理系统的基石之一,贯穿这三层 API。在 DataStream API 这一层中因为封装方面的原因,我们能够接触到时间的地方不是很多,所以我们将重点放在底层的 ProcessFunction 和最上层的 SQL/Table API。
4516 0
重磅!《Apache Flink 十大技术难点实战》发布,帮你从容应对生产环境中的技术难题
总结生产环境十大常见难点,10篇技术实战文章帮你完成故障识别、问题定位、性能优化等全链路过程,实现从基础概念的准确理解到上手实操的精准熟练,从容应对生产环境中的技术难题!
27676 0
必看!Apache Flink 运维&实战系列直播,揭秘生产环境技术难点
随着 Flink 社区的快速发展,其技术也逐渐走向成熟。在 2019 年,国内已经有大量的本土互联网公司开始采用 Apache Flink 作为主流的实时计算解决方案。同时,在全球范围内,优步、网飞、微软和亚马逊等国际互联网公司也逐渐开始使用 Apache Flink。
2702 0
性能提升约 7 倍!Apache Flink 与 Apache Hive 的集成
随着 Flink 在流式计算的应用场景逐渐成熟和流行,如果 Flink 能同时把批量计算的应用场景处理好,就能减少用户在使用 Flink 时开发和维护的成本,并且能够丰富 Flink 的生态。SQL 是批计算中比较常用的工具,所以 Flink 针对于批计算也以 SQL 为主要接口。本次分享主要介绍 Flink 对批处理的设计与 Hive 的集成。
2724 0
如何在 Apache Flink 1.10 中使用 Python UDF?
在刚刚发布的 ApacheFlink 1.10 中,PyFlink 添加了对 Python UDFs 的支持。这意味着您可以从现在开始用 Python 编写 UDF 并扩展系统的功能。此外,本版本还支持 Python UDF 环境和依赖管理,因此您可以在 UDF 中使用第三方库,从而利用 Python 生态丰富的第三方库资源。
1419 0
首发|《Apache Flink 年度最佳实践》,揭秘一线大厂实时平台构建实践
甄选 Apache Flink 及大数据领域顶级盛会 Flink Forward Asia 大会嘉宾精彩分享,覆盖国内外一线大厂实时平台构建的经验分享与实时数仓的应用实践,为你揭秘实时计算平台从无到有到有、持续优化的详细细节!
2908 0
从 Spark Streaming 到 Apache Flink:bilibili 实时平台的架构与实践
本文由 bilibili 大数据实时平台负责人郑志升分享,基于对 bilibili 实时计算的痛点分析,详细介绍了 bilibili Saber 实时计算平台架构与实践。本次分享主要围绕以下四个方面:实时计算的痛点、Saber 的平台演进、结合 AI 的案例实践、未来的发展与思考。
2486 0
677
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载