既然 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%为你的安装目
整合
1准备下载下列文件
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);
%>