Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1900320
  • 博文数量: 606
  • 博客积分: 9991
  • 博客等级: 中将
  • 技术积分: 5725
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-17 19:07
文章分类

全部博文(606)

文章存档

2011年(10)

2010年(67)

2009年(155)

2008年(386)

分类: Java

2009-09-30 14:42:35

整合 Apache Http Server 和 Tomcat 可以提升对静态文件的处理性能、利用 Web 服务器来做负载均衡以及容错、无缝的升级应用程序。本文介绍了三种整合 Apache 和 Tomcat 的方式。

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

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

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

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

3. 无缝的升级应用程序

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

接下来我们介绍三种方法将 apache 和 tomcat 整合在一起。

这是最常见的方式,你可以在网上找到很多关于配置JK的网页,当然最全的还是其官方所提供的文档。JK 本身有两个版本分别是 1 和 2,目前 1 最新的版本是 1.2.19,而版本 2 早已经废弃了,以后不再有新版本的推出了,所以建议你采用版本 1。

原理:

    tomcat 为一个servelet容器,apache为一个web server,两者之间通信通过mod_jk的模块(由web服务器像apache、iis等使用)和Web Server通信,Tomcat 默认的 AJP Connector 的端口是 8009.整个过程其实就是让apache的httpd.conf文件调用mod_jk.conf,mod_jk.conf调用workers.properties,最后配置虚拟主机。
文件说明 :

    mod_jk.conf

    主要定义mod_jk模块的位置以及mod_jk模块的连接日志设置,还有定义worker.properties文件的位置。
worker.properties
定义worker的参数,主要是连接tomcat主机的地址和端口信息。如果Tomcat与apache不在同一台机器上,或者需要做多台机器上tomcat的负载均衡只需要更改workers.properties文件中的相应定义即可。

    %APACHE_HOME%为你的安装目
1、准备下载下列文件:

Jdk1.6

tomcat 6.0

apache_2.2.4-win32-x86-no_ssl.msi

mod_.so

下载地址:

2、安装好Jdk、tomcat、apache后,加入mod_jk连接模块,就是把mod_jk-apache-1.2.28.so文件重名为mod_jk.so文件并拷贝到%APACHE_HOME%"modules下

3、修改apache的配置文件:

为了保持httpd.conf文件的简洁,把jk模块的配置放到单独的文件中来,就在httpd.conf中增加一行调用
代码  include conf/mod_jk.conf    (放在%APACHE_HOME%Apache2"conf")

4:配置mod_jk.conf
请注意使用绝对路径
其实最关键的就是 第一条 第二条 和最后一条,如果要精简,就保留这三条内容就可以了。
代码
# Load mod_jk module

LoadModule jk_module "D:/Program Files/Apache Software Foundation/Apache2.2/modules/mod_jk.so"

# Where to find workers.properties

JkWorkersFile "D:/Program Files/Apache Software Foundation/Apache2.2/conf/workers.properties"

# Where to put jk logs

JkLogFile "D:/Program Files/Apache Software Foundation/Apache2.2/logs/mod_jk.log"

# Set the jk log level [debug/error/info]

JkLogLevel info

# Select the log format

JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

# JkOptions indicate to send SSL KEY SIZE,

JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

# JkRequestLogFormat set the request format

JkRequestLogFormat "%w %V %T"

# Send servlet for context /examples to worker named ajp13

#JkMount /servlet/* ajp13

# Send JSPs for context /examples to worker named ajp13

JkMount /*.jsp ajp13

JkMount /*.jspa ajp13

JkMount /*.jspx ajp13

JkMount /*.do ajp13

JkMount /*.htm ajp13

上面这一行我们设置了了 /*.jsp ajp13 就是说把所有.jsp结尾的文件都由ajp13这个worker交给tomcat处理了,如果应用被映射为一个.do的URL,这样就会出错.解决方法是再添加如下一行:
代码
JkMount /*.do ajp13

5:配置apache2"conf"workers.properties
代码

workers.tomcat_home="D:/Program Files/Tomcat 6.0"

workers.java_home="C:/Program Files/Java/jdk1.6.0_14"

worker.list=ajp13

worker.ajp13.port=8009  #必须与tomcat server.xml配置文件的Connector端口设置相统一

worker.ajp13.host= #在host中映射:127.0.0.1   

worker.ajp13.type=ajp13 # 类型

worker.ajp13.lbfactor=1 # 代理数,不用修改


第二部分:虚拟主机的配置
举例配置2个vhost网站 一个是 localhost ,另一个是 
当然 是虚拟的,本地测试时,应该修改系统中的hosts文件,添加一行 127.0.0.1 
1:Apache 虚拟主机配置:
Httpd.conf文件最后添加
代码
include conf/vhost.conf

而vhost.conf内容写
代码

ServerAdmin
ServerName
DirectoryIndex index.html index.htm index.jsp
JkMount /* ajp13  
JkAutoAlias "E:/fisher/Workspaces/eclipse/GZCT-WAP/web"

  Options Indexes FollowSymLinks
  allow from all

3:测试虚拟主机效果
访问应该可以看到原来的tomcat默认页面。
写一个 index.jsp
代码

<BR>test jsp <BR>
<%
String showMessage="Oh My God!";
out.print(showMessage);
%>

4. 开始负载均衡(TOCMAT端口为:8080, HttpServer端口为:80)

 启动tomcat

 启动httpserver

 访问,实际上被转向到

5. 可能存在的问题:

  问题描述:apache出现You don't have permission to access / on this server. 提示

  解决方法:


    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all

这里改成

    Options Indexes FollowSymLinks
    AllowOverride None

相关资料:

Windows XP 环境下安装 Apache HTTP Server 2.2.8

Apache HTTP Server 与 Tomcat 的三种连接方式介绍

Apache HTTP Server 与 tomcat 的集群配置连接

              

阅读(2098) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~