`
yaobo2816
  • 浏览: 24796 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

apache 2.0.58 和tomcat整合

阅读更多

Apache和Tomcat的整合,原理及例子 --copy liang blog

这类文档很多很多,但是大多是由不明原理的人拘泥于具体版本写出来的,有很多错漏或多余的部分。
最后找到一篇写得很很不错的,http://macawspark.spaces.live.com/blog/
我修正了其中的错误然后加了一些自己的理解
原理
tomcat 为一个jsp的容器,apache为一个web server,两者之间通信通过worker进行(由Tomcat使用Server.xml文件中Connector的标签来定义其端口和协议),通过 mod_jk的模块(由web服务器像apache、iis等使用)和Web Server通信。
通信协议有很多,其中jk2已经被抛弃了,现在就用jk就好了。
整个过程其实就是让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文件中的相应定义即可。

第一部分:安装配置tomcat apache mod_jk j2sdk

准备下载下列文件
Jdk1.5
下载地址: http://java.sun.com
tomcat 5.5.9
下载地址:http://jakarta.apache.org
apache apache_2.0.59
下载地址: http://httpd.apache.org/download.cgi
jakarta-tomcat-connectors-jk2.0.43-win32-apache2.0.49(根据Apache版本决定)
下载地址:http://archive.apache.org/dist/jakarta/tomcat-connectors/
把上面所有组件都安装到D:\Server目录下,这样也方便日常管理配置和将来移植到别的服务器上去。
1:安装j2sdk
安装到 D:\server\j2sdk\ 目录下,注意安装成系统服务
2: 安装tomcat
安装到D:\server\tomcat\目录下,注意安装成系统服务
可能遇到的问题
问题1: 在解析JSP页面时,提示无法找到java compiler
请拷贝 j2sdk\lib\tools.jar 到 tomcat\common\lib下面。
使用tomcat作为service启动后总是这样,当然用startup.bat脚本启动倒是完全正常。主要原因分析起来是以service方式启动的Tomcat无法读取JAVA_HOME 和CLASS_PATH等环境变量。
问题2:如何解决通过服务方式启动tomcat时log中提示ZoneInfo:d:\server\j2sdk\lib\zi\ZoneInfoMappings(系统找不到指定的路径。)
从d:\server\j2sdk\jre\lib目录拷贝所有文件放到 d:\server\j2sdk\lib\ ,jre\lib 中的文件和j2sdk\lib\ 中的文件没有一个重复的,不用担心会覆盖掉j2sdk\lib 中原有的任何文件。
3:安装apache 到 d:\server\ (会自动生成apache2文件夹)
配置 index.jsp 为默认页 配置 GB2312为默认语言
不只Apache的httpd.conf中定义了默认页面文件,连Tomcat的web.xml配置文件的结尾处也定义了默认页面文件,而且Tomcat中定义的的优先级还高于原有的Apache中所定义的默认页。
4:加入mod_jk连接模块
拷贝 mod_jk-1.2.10-apache-2.0.43.so 到d:\server\apache2\modules\ 改名为mod_jk.so
5: 修改apache的配置文件
为了保持httpd.conf文件的简洁,把jk模块的配置放到单独的文件中来,就在httpd.conf中增加一行调用
代码
include D:\server\Apache2\conf\mod_jk.conf

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

# Where to find workers.properties
JkWorkersFile conf/workers.properties

# Where to put jk logs
JkLogFile 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

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

7:配置apache2\conf\workers.properties
代码
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost #本机,若上面Tomcat主机不为localhost,作相应修改
worker.ajp13.type=ajp13 #类型
worker.ajp13.lbfactor=1 #代理数,不用修改


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

而vhost.conf内容写
代码
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster at localhost
DocumentRoot "D:/server/Tomcat/webapps/ROOT"
ServerName localhost
ErrorLog logs/localhost-error_log
CustomLog logs/localhost-access_log common
</VirtualHost>

<VirtualHost *:80>
ServerAdmin webmaster@dummy-host dot example.com
DocumentRoot D:/server/www/
ServerName www.ok.com
ErrorLog logs/ok.com-error_log
CustomLog logs/ok.com-access_log common
<Location /server-status> # 这样我可以看到apache服务器状态
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
Allow from www.ok.com
</Location>
</VirtualHost>

2:Tomcat虚拟主机配置
添加新的www.ok.com 虚拟主机,在tomcat安装路径\conf\server.xml的最后,找到<Engine>段,改为
代码
<Engine>
<Host name=”localhost” ……>
</Host>

<Host name="www.ok.com" debug="0" appBase="D:/server/www/" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="." />
<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="ok.com_log." suffix=".txt" timestamp="true" />
</Host>
</Engine>

3:测试虚拟主机效果
访问http://localhost/ 应该可以看到原来的tomcat默认页面。
写一个 index.jsp
代码
<html>
<title>
test jsp
</title>
<%
String showMessage="Oh My God!";
out.print(showMessage);
%>
</html>

放在d:/server/www下面,访问 http://www.ok.com
页面显示Hello World! 就成功了

第三部分,部分相关性能优化及其它问题
如何使用server版jvm ?
Jvm动态库有client和server两个版本,分别针对桌面应用和服务器应用做了相应的优化,client版本加 载速度较快,server版本加载速度较慢但运行起来较快。
在开始菜单 tomcat5 ->tomcat config的java属性中 有一项 jvm路径 指向server目录下的jvm就行了。
更改默认java.exe调用的jvm.dll,这个由jvm.cfg决定。
编辑%JAVA_HOME%\jre\lib\i386\jvm.cfg
里面第一行写的是 -client 默认就是client版本 ,把第二行的-server KNOWN 放到第一行, 如下面所示
代码
-server KNOWN
-client KNOWN
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR

改完保存,然后看看默认版本:
C:\java -version
java version "1.4.2_07"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_07-b05)
Java HotSpot(TM) Server VM (build 1.4.2_07-b05, mixed mode)

关于JAVA_HOME 与CATALINA_HOME、 CLASSPATH
ClassPath 网上有人说在j2sdk1.3开始就不需要配置了,而本例中实际是不需要配置JAVA_HOME和CATALINA_HOME的,因为tomcat 以service模式启动根本不认你的java_home,当然为了让你能够在命令行运行startup.bat时也能顺利启动Tomcat,可以配置也建议配置上JAVA_HOME 与CATALINA_HOME,ClassPath就免了吧,连Resin都不需要这个了。

有关路径设置
Path=d:\server\jdk\bin;…… 放到最前,避免有多个jdk时的很多问题

关于apache2在win平台上的一个小问题
可能apache的日志中常出现类似如下的提示
[error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.
这是由于apache 使用了微软的AcceptEx()调用的缘故,禁用掉即可,此问题只会出现在win平台且apache的2.0.49和更高版本上,出现错误的大概原因是防火墙和防病毒软件所导致,导致结果也有好几种,像apache占用很高cpu资源或者网站页面无法打开。
解决方法修改d:\server\apache2\conf\httpd.conf中的mpm部分
代码
<IfModule mpm_winnt.c>
ThreadsPerChild 250
MaxRequestsPerChild 0
Win32DisableAcceptEx #添加这一行即可,做过压力测试,对性能影响很小,可以忽略
</IfModule>
分享到:
评论

相关推荐

    apache2.0.58 和mod_jk-apache-2.0.58.so

    标签中的"apache整合tomcat 必要"强调了在处理Java Web应用程序时,结合Apache和Tomcat的必要性。Apache擅长处理静态资源,而Tomcat是Java Servlet和JSP的容器,两者结合可以提供高性能、高并发的Web服务。在实际...

    apache win32 2_0_58 mod_rewrite exploit VC++代码

    在`win32`平台上,Apache 2.0.58是一个较旧的版本,可能存在的安全漏洞可能被攻击者利用。 本文将深入探讨Apache 2.0.58版本在`mod_rewrite`模块中存在的一个潜在的exploit(利用),并介绍如何通过VC++编写相关的...

    arcims+tomcat+apatch安装手册

    在本安装手册中,我们将详述如何在Windows操作系统(如Windows 2003、2000或XP)上搭建ArcIMS 9.2的环境,包括apatch、Tomcat和Apache 2.0.58服务器。首先,确保您具备了所有必要的软件组件,这些组件包括: 1. **...

    cvsnt-2.0.58d版本控制.rar

    本篇文章将详细介绍CVSNT 2.0.58d这个版本的特性和使用方法。 一、CVSNT简介 CVSNT是CVS(Concurrent Versions System)的一个分支,针对Windows操作系统进行了优化,提供了一套完善的图形用户界面(GUI),同时...

    CVSNT 2.0.58d

    4. `dejoy_CVSNT-2.0.58d_TortoiseCVS V1.8.14.txt`:这个文件可能是安装指南或变更日志,详细介绍了CVSNT 2.0.58d和TortoiseCVS 1.8.14的更新内容和安装步骤。 使用CVSNT和TortoiseCVS,开发者可以实现以下关键...

    Trac+SSPI+SVN+Apache

    在Windows环境下,整合Apache、SVN(Subversion)和Trac是一项常见的任务,尤其是对于企业内部的版本控制系统和项目管理工具。以下是一个详细的集成步骤,以实现使用域账号进行身份验证。 首先,我们来看Apache的...

    apache

    在2.0.58版本中,Apache可能已经修复了一些已知的安全问题和性能改进。SSL是用于加密Web通信的重要组件,但在这个版本中没有集成,意味着用户需要单独配置SSL支持,例如通过安装OpenSSL库。 `飞翔下载说明.txt`可能...

    cvsnt-2.0.58d

    总之,CVSNT-2.0.58d是一个专为Windows设计的版本控制系统,旨在提供比原版CVS更强大的功能和更好的用户体验。对于Windows上的软件开发团队而言,它是一个有价值的工具,可以帮助团队高效协作,确保代码的质量和稳定...

    CVS 服务器程序 CVSNT 2.0.58d + CVS 客户端工具 TortoiseCVS 1.10.10 (for win7)+ 图示说明

    CVS 服务器程序 CVSNT 2.0.58d + CVS 客户端工具 TortoiseCVS 1.10.10 (for win7)+ 图示说明 最新的版本cvsnt-2.5.03.2382有4.2MB,追新的朋友可以自己上官网下载. 1都安装好软件 2配置服务器端  a 查看运行...

    cvsnt-2.0.58d.exe

    cvsnt-2.0.58d.exe 团队合作开发工具 搭配简单

    Linux下Apache+MySQL+PHP的安装配置.doc

    4. 接着执行 `make` 和 `make install` 编译并安装Apache。 5. 使用 `/usr/local/www/bin/apachectl start` 命令启动Apache服务器,`/usr/local/www/bin/apachectl restart` 用于重启服务器。 **MySQL的安装配置**...

    cvsNT 2.0.58a+tortoisecvs配置点滴

    在本文中,我们将详细讨论如何配置cvsNT 2.0.58a和TortoiseCVS进行协同开发。 **一、cvsNT配置** 1. **安装与重启**: - 安装cvsNT 2.0.58a。 - 完成安装后,重启计算机以确保所有服务生效。 2. **服务控制面板...

    PyPI 官网下载 | seriously-2.0.58-py3-none-any.whl

    标题中的"PyPI 官网下载 | seriously-2.0.58-py3-none-any.whl"指的是一款名为seriously的Python库,版本号为2.0.58,该库已打包成whl格式,可以在Python的包安装平台PyPI(Python Package Index)上找到并下载。...

    cvsnt 2.0.58d+tcvs+配置说明(图解)

    **cvsnt 2.0.58d+tcvs 配置详解** CVS(Concurrent Versions System)是一款开源的版本控制系统,用于管理软件项目的源代码和其他文档。cvsnt是CVS的一个分支,提供了更多的特性,如Windows集成、改进的安全性以及...

    Python库 | cdk_gitlab_runner-2.0.58-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:cdk_gitlab_runner-2.0.58-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    CVS 开发环境搭建、

    1. **解压**:使用命令`$ tar Cxjvf fttpd-2.0.58.tar.bz2`解压Apache安装包。 2. **编译配置**:进入解压后的目录`$ cd fttpd-2.0.58`,然后执行`$ ./configure --enable-dav --enable-so --prefix=/usr/local/...

Global site tag (gtag.js) - Google Analytics