服务器

位置:IT落伍者 >> 服务器 >> 浏览文章

Apache http Server与Tomcat整合


发布日期:2023年11月27日
 
Apache http Server与Tomcat整合

既然 Tomcat 本身已经可以提供这样的服务我们为什么还要引入 Apache 或者其他的一些专门的 HTTP 服务器呢?原因有下面几个Apache的HTTPD是目前比较受欢迎的网站服务器软件它不但功能强大而且完全免费并且支持市场上流行的各种操作系统(WindowsLinuxMac os)同时对于Java Servlet/JSP的支持通常也会使用同样Apache出品的Tomcat Tomcat除了支持Java Servlet/JSP之外也可以当做网站服务器使用但是在对于静态的html文件图片文件等的解析效率上不如Apache HTTPD的执行效率高应用tomcat的服务器如果网站的访问量较大系统资源占用会明显升高近日笔者在项目执行过程中遇到这一问题便也想到同时应用tomcat+apache服务Apache负责静态资源处理tomcat负责jsp和java servlet等动态资源的处理

整合之后的好处是

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

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

无缝的升级应用程序

原理:

tomcat 为一个servelet容器apache为一个web server两者之间通信通过mod_jk的模块(由web服务器像apacheiis等使用)和Web Server通信Tomcat 默认的 AJP Connector 的端口是 整个过程其实就是让apache的文件调用nfnf调用workersproperties最后配置虚拟主机

文件说明

nf

主要定义mod_jk模块的位置以及mod_jk模块的连接日志设置还有定义workerproperties文件的位置

workerproperties

定义worker的参数主要是连接tomcat主机的地址和端口信息如果Tomcat与apache不在同一台机器上或者需要做多台机器上tomcat的负载均衡只需要更改workersproperties文件中的相应定义即可

%APACHE_HOME%为你的安装目

整合

准备下载下列文件

Jdk

下载地址:

tomcat

下载地址

apache_winxno_sslmsi

下载地址:

mod_jk-apacheso

下载地址connectors/

安装好Jdktomcatapache后加入mod_jk连接模块就是把mod_jk-apacheso文件重名为mod_jkso文件并拷贝到%APACHE_HOME%modules下

修改apache的配置文件

为了保持文件的简洁把jk模块的配置放到单独的文件中来就在中增加一行调用

代码 include %APACHE_HOME%Apacheconfnf

配置nf

请注意使用绝对路径

其实最关键的就是 第一条 第二条 和最后一条如果要精简就保留这三条内容就可以了

代码

# Load mod_jk module

LoadModule jk_module E:Program FilesApache Software FoundationApachemodulesmod_jkso

# Where to find workersproperties

JkWorkersFile E:Program FilesApache Software FoundationApacheconfworkersproperties

# Where to put jk logs

JkLogFile E:Program FilesApache Software FoundationApachelogsmod_jklog

# 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 ajp

#JkMount /servlet/* ajp

# Send JSPs for context /examples to worker named ajp

JkMount /*jsp ajp

JkMount /*do ajp

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

代码

JkMount /*do ajp

:配置apacheconfworkersproperties

代码

workerstomcat_home=E:Program FilesApache Software FoundationTomcat

workersjava_home=E:Program FilesJavajdk_

workerlist=ajp

workerajpport=

workerajphost=localhost #

workerajptype=ajp #

workerajplbfactor= #

workerlist=ajp

workerajpport=

workerajphost=localhost #本机若上面Tomcat主机不为localhost作相应修改

workerajptype=ajp #类型

workerajplbfactor= #代理数不用修改

第二部分:虚拟主机的配置

举例配置个vhost网站 一个是 localhost 另一个是

当然 是虚拟的本地测试时应该修改系统中的hosts文件添加一行

Apache 虚拟主机配置

nf文件最后添加

代码

include D:serverApacheconfnf

而nf内容写

代码

NameVirtualHost *:

<VirtualHost *:>

ServerAdmin webmaster at localhost

DocumentRoot D:/server/Tomcat/webapps/ROOT

ServerName localhost

ErrorLog logs/localhosterror_log

CustomLog logs/localhostaccess_log common

</VirtualHost>

<VirtualHost *:>

ServerAdmin webmaster@dummyhost dot

DocumentRoot D:/server/www/

ServerName

ErrorLog logs/error_log

CustomLog logs/access_log common

<Location /serverstatus> # 这样我可以看到apache服务器状态

SetHandler serverstatus

Order denyallow

Deny from all

Allow from localhost

Allow from

</Location>

</VirtualHost>

Tomcat虚拟主机配置

添加新的 虚拟主机在tomcat安装路径confserverxml的最后找到<Engine>段改为

代码

<Engine>

<Host name=localhost ……>

</Host>

<Host name= debug= appBase=D:/server/www/ unpackWARs=true autoDeploy=true xmlValidation=false xmlNamespaceAware=false>

<Context path= docBase= />

<Logger className=orgapachecatalinaloggerFileLogger directory=logs prefix=_log suffix=txt timestamp=true />

</Host>

</Engine>

测试虚拟主机效果

访//localhost/ 应该可以看到原来的tomcat默认页面

写一个 indexjsp

代码

<html>

<title>

test jsp

</title>

<%

String showMessage=Oh My God!;

outprint(showMessage);

%>

               

上一篇:怎样做Tomcat4.1.31的数据库连接池配置

下一篇:Jakarta-Tomcat 简明中文版用户指南