**Apache整合 Tomcat实例

原创 2012年03月22日 16:59:00

1.Apache为什么要整合Tomcat?

事实上Tomcat本身已经提供了HTTP服务,该服务默认的端口是8080,装好tomcat后通过8080端口可以直接使用Tomcat所运行的应用程序,你也可以将端口改为80.

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

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

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

3).无缝的升级应用程序

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

2.Apache融合Tomcat的三种方式

JK 

http_proxy 

ajp_proxy

关于这三种方式的区别和好处详见http://www.ibm.com/developerworks/cn/ opensource/ os-lo-apache-tomcat/

3.**ApacheTomcat的整合方式

**Apache整合Tomcat采用经典的JK模式。JK模块是通过AJP协议与Tomcat服务器进行通讯的,Tomcat默认的AJP Connector的端口是8009

**测试环境采用Apache(1)+Tomcat(N)的方式进行转发,即root帐户下一台Apache用于请求转发,每个用户下各配置一个Tomcat部署相关的应用。

配置步骤如下(以**##系统为例):

Apache安装目录:/opt/httpd-2.2.14/

Tomcat安装目录:/home/jd-lottery/jd-lottery

(1)向/opt/httpd-2.2.14/modules下添加mod_jk.so

(2)在/opt/httpd-2.2.14/conf/httpd.conf下添加如下配置(另引入两个配置文件)

# Virtual hosts

Include conf/extra/httpd-jk.conf

Include conf/extra/httpd-vhosts.conf

 (3)httpd-jk.conf中配置如下内容

</Directory>

#<Location /jkstatus>

#        Order deny,allow

#        Deny from all

#</Location>

#载入监控模块

LoadModule jk_module modules/mod_jk.so 

#Tomcat服务器的连接定义文件

JkWorkersFile "conf/workers.properties" 

#URI映射文件,用来指定哪些URLTomcat处理,你也可以直接在httpd.conf中配置这些URI,但是独立这些配置的好处是JK模块会定期更新该文件的内容,使得我们修改配置的时候无需重新启动Apache服务器

JkMountFile "conf/uriworkermap.properties"

JkLogFile logs/mod_jk.log

JkLogLevel warn

(4)在/opt/httpd-2.2.14/conf/workers.properties下进行如下配置

# list the workers by name 

worker.list=status, jd-caipiao

# status 监控JK本身的状态

worker.status.type=status

# ------------##------------

worker.jd-caipiao.port=8743

worker.jd-caipiao.host=127.0.0.1

worker.jd-caipiao.type=ajp13

    (5)在httpd-vhosts.conf下进行如下配置

NameVirtualHost *:80

<VirtualHost *:80>

    DocumentRoot "/home/jd-lottery/jd-lottery-web.war"

    ServerName caipiao.360buy.net

    ServerAlias caipiao.360buy.com

    <Directory "/home/jd-lottery/jd-lottery-web.war">

        Options -Indexes +FollowSymLinks

        AllowOverride None

        Order allow,deny

        Allow from all

   </Directory>

   <IfModule dir_module>

        DirectoryIndex index.html index.htm

   </IfModule> 

   JkMountFile "conf/jd-caipiao-uriworkermap.properties"

</VirtualHost>

<VirtualHost *:80>

    DocumentRoot "/home/jd-lottery/jd-lotteryman-web.war"

    ServerName man.caipiao.360buy.net

    ServerAlias man.caipiao.360buy.com

    <Directory "/home/jd-lottery/jd-lotteryman-web.war">

        Options -Indexes +FollowSymLinks

        AllowOverride None

        Order allow,deny

        Allow from all

   </Directory>

   <IfModule dir_module>

        DirectoryIndex index.html index.htm

   </IfModule> 

   JkMountFile "conf/jd-caipiao-uriworkermap.properties"

</VirtualHost>

(6)在/opt/httpd-2.2.14/conf/jd-caipiao-uriworkermap.properties中进行如下配置

/*=jd-caipiao

/*.jsp=jd-caipiao

/*.action=jd-caipiao

  (7)tomcat中虚拟主机和apj端口的配置

/home/jd-lottery/jd-lottery/conf/server.xml配置如下:

 <?xml version="1.0" encoding="utf-8"?>

-<Server port="8741" shutdown="SHUTDOWN">

 <ListenerclassName="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

 <ListenerclassName="org.apache.catalina.core.JasperListener" />

 <ListenerclassName="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

 <ListenerclassName="org.apache.catalina.mbeans.ServerLifecycleListener" />

 <ListenerclassName="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

-<GlobalNamingResources>

 <Resourcename="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" />

 </GlobalNamingResources>

-<Service name="Catalina">

 <!---HTTP协议监听端口,默认为8080->

 <Connectorport="8742" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="gbk" useBodyEncodingForURI="true" />

 <!--APJ协议监听端口,apache通过此端口和tomcat通讯-->

 <Connectorport="8743" protocol="AJP/1.3" redirectPort="8443" URIEncoding="gbk" useBodyEncodingForURI="true" />

-<Engine name="Catalina" defaultHost="localhost">

 <RealmclassName="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />

 <!-- 虚拟主机的配置,这里的配置要跟httpd-vhosts.conf里相对应-->

-<Host name="man.caipiao.360buy.net" appBase="webapps" unpackWARs="false" autoDeploy="false" xmlValidation="false" xmlNamespaceAware="false">

 <Alias>man.caipiao.360buy.com</Alias>

 </Host>

 <Host name="caipiao.360buy.net" appBase="webapps" unpackWARs="false" autoDeploy="false" xmlValidation="false" xmlNamespaceAware="false" />

 </Engine>

 </Service>

 </Server>

 

(8)tomcat设置虚拟目录

   tomcat虚拟目录的配置方式有三种,**测试环境中主要是采用在/home/jd-lottery/jd-lottery/conf目录下添加Catalina目录的方式,目录结构如下:

   Catalina/lottery.360buy.net/ROOT.xml,内容如下:

<Context path="" docBase="/home/jd-lottery/work/test/lottery" />

   Catalina/man.caipiao.360buy.net/ROOT.xml,内容如下:

<Context path="" docBase="/home/jd-lottery/jd-lotteryman-web.war" />

备注:

(1)Apache默认发布目录为:%apache_home%\htdocs

修改默认发布目录的方式:

修改配置文件:httpd.conf
DocumentRoot "D:/apache2.2.4/htdocs"  修改为"D:/htdocs"
<Directory "D:/apache2.2.4/htdocs">
    Order allow,deny
    Allow from all
</Directory>
修改为
<Directory "D:/htdocs">
    Order allow,deny
    Allow from all
</Directory>

 

不过这里应该注意:如果配置了虚拟主机,即打开了Include conf/extra/httpd-vhosts.conf功能,则在httpd.conf配置的目录方面方式会失效,可以在httpd-vhost.conf增加如下配置:

<VirtualHost *:80>

    DocumentRoot "D:/htdocs"
    ServerName log

    <Directory "D:/htdocs">
        Order allow,deny
        Allow from all
    </Directory>

</VirtualHost>

从而打开目录发布功能。

(2)/opt/httpd-2.2.14/logs/access_log 里面可以看到访问每次的访问量。

(3)如果Apache启动不成功,可以通过Apache HTTP Server 2.2.4-->Configure Apache Server-->Test Configuration检测是哪个配置文件出了问题。

(4)加入JK监控的功能,在httpd-vhosts.conf中增加如下配置(也可以共用别的虚拟主机)

<VirtualHost *:80>

    DocumentRoot "D:/htdocs"
    ServerName localhost

    <Directory "D:/htdocs">
        Order allow,deny
        Allow from all
    </Directory>

    <Location /jkstatus>
       JkMount status
       Order deny,allow
    </Location>

    JkMountFile "conf/uriworkermap.properties"
</VirtualHost>

在conf/uriworkermap.properties中增加如下配置:

 /jkstatus=status

参与文档:

(1)http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html这个是JK的官网文档。

(2)http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/这个是IBM网站的一个总结性质的文档。

(3)http://wenku.baidu.com/view/6b08654ffe4733687e21aa1d.html这个是百度文库的一个讲解PPT。

apache_tomcat_整合实例

  • 2008年07月20日 15:54
  • 3KB
  • 下载

基于Apache和多实例Tomcat(独立JVM)的虚拟主机方案

用虚拟主机方式为二级部门提供网站空间是一般学校的罕见做法,这样既能节省服务器设备的投资又减少了管理工作量。 Linux 环境下,通常使用 Apach 实现静态计算机基础知识http://www.woa...
  • joliny
  • joliny
  • 2012年03月14日 20:57
  • 10289

实例Apache负载均衡+Tomcat集群

  • 2017年04月20日 18:54
  • 486KB
  • 下载

实例详解tomcat组件安装+Nginx反向代理tomcat+Apache使用mod_jk和mod_proxy反向代理和负载均衡

一、Tomcat简介    Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些...

Windows下Apache整合Tomcat.doc

  • 2016年06月01日 14:14
  • 168KB
  • 下载

用apache代理实现整合多个tomcat

要求:   运行多个tomcat,通过apache侦听的端口进行区分。   对于每个tomcat,配置各自需要服务的虚拟主机   使用Apache的Proxy进行代理转发,转到对应的tomca...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:**Apache整合 Tomcat实例
举报原因:
原因补充:

(最多只允许输入30个字)