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 的作用,合理规划目录结构,充分利用禁止转发功能。
Apache和tomcat服务器使用ajp_proxy模块的更多相关文章
- Java基础知识强化98:Apache和Tomcat服务器的联系与区别
1. Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML.PHP.JSP.Perl等开发过程中,需要准确掌握其各自特点,选择最佳的服务器配置. Apache是w ...
- Apache与Tomcat服务器
Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.在Apache基金会里面Apache S ...
- Tomcat 服务器基本知识
Tomcat下载安装和配置 下载 下载地址: http://tomcat.apache.org tomcat服务器分为很多版本, 其中包括windows版和linux版 ...
- Apache与Tomcat三种连接方式JK、http_proxy、ajp_proxy
为什么要让Apache与Tomcat之间进行连接?事实上Tomcat本身已经提供了HTTP服务,该服务默认的端口是8080,也可以改为80.既然Tomcat本身已经可以提供动态加静态web服务,为什么 ...
- (转)Linux整合apache和tomcat构建Web服务器
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wenzhongxiang.blog.51cto.com/6370734/1285 ...
- 【Web网站服务器开发】Apache 和 Tomcat的区别及配置
Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML.PHP.JSP.Perl等开发过程中,需要准确掌握其各自特点,选择最佳的服务器配置. apache是web服 ...
- Apache(web服务器)与Tomcat(应用服务器)搭建集群
web服务器:Apache.Nginx.IIS等 应用服务器:Tomcat.JBoss.Weblogic等 现在web服务器和应用服务器其实界限已经不是太清晰了,大部分的应用服务器也包含一些web服务 ...
- web服务器专题:tomcat(二)模块组件与server.xml 配置文件
web服务器专题:tomcat(二)模块组件与server.xml 配置文件 回顾: Web服务器专题:tomcat(一) 基础模块 一个Server.xml的实例 <?xml version= ...
- JSP之WEB服务器:Apache与Tomcat的区别 ,几种常见的web/应用服务器
注意:此为2009年的blog,注意时效性(针对常见服务器) APACHE是一个web服务器环境程序 启用他可以作为web服务器使用 不过只支持静态网页 如(asp,php,cgi,jsp)等 ...
随机推荐
- linux /usr/bin/ld: cannot find -lxxx
在linux环境编译应用程式或lib的source code时出现如下错误:/usr/bin/ld: cannot find -lxxx 这些讯息会随着编译不同类型的source code 而有不同的 ...
- Centos7 php 5.6.19编译安装
0x01 前言 在php官网下载php-5.6.19.tar.gz源代码(php7虽然说性能提升很大,但是小菜菜还是先用着这个先吧),解压后根目录有个INSTALL文件,里面有安装教程了,目录如下: ...
- SAS文档:简单的随机点名器
本次实验,我们设计了一个简单的随机点名系统,下面我来介绍一下它的SRS文档. 1.功能需求: 1.1 模块1 在此模块中,我们设置了RandomName类,创建一个随机点名器,里面加入了所在课程的名单 ...
- POJ3680_Intervals
给你若干个区间,每个区间有一个权值,你可以选出某些区间,使得在保证没有任何一段的覆盖次数超过k的前提下,总的权值最大. 这个建模真的十分神奇,赞一个. 对于给出的每一个区间,离散化,最终我们可以知道所 ...
- SQL优化笔记—CPU优化
补充:常规服务器动态管理对象包括,下面有些资料可能会应用到 dm_db_*:数据库和数据库对象dm_exec_*:执行用户代码和关联的连接dm_os_*:内存.锁定和时间安排dm_tran_*:事务和 ...
- HTTP学习笔记(2)HTTP报文
1,什么是http报文? 上一节我们了解到数据在浏览器和服务器之间进程传送,这些数据被称为报文流,报文流有流入流出之分,当然在也有上游和下游,这些都是来确定报文的流向. 报文的流向都是向下,而不会回流 ...
- GROUP BY,WHERE,HAVING之间的区别和用法
GROUP BY,WHERE,HAVING之间的区别和用法 分类: Oracle学习2009-11-01 23:40 21963人阅读 评论(6) 收藏 举报 mathmanagersql数据库m ...
- PHP表单处理
<?php if(isset($_POST['submit'])) { foreach ($_POST["languages"] as $item) { echo " ...
- ASP.NET MVC请求处理管道生命周期的19个关键环节(7-12)
在上一篇"ASP.NET MVC请求处理管道生命周期的19个关键环节(1-6) ",体验了1-6关键环节,本篇继续. ⑦根据IsapiWorkerRequest对象,HttpRun ...
- 微软BI 之SSIS 系列 - 2008 版本中变量 Int64 无法保存 bigint 类型数据的BUG
开篇介绍 这是今天在帮别人看一个 2008R2 版本的项目时发现的一个 Bug,这个 Bug 在 SQL SERVER 2012 有的版本中可能已经解决,但在论坛上看到有的仍然存在. 在 SQL SE ...