转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/70398091

本文出自【我是干勾鱼的博客

之前的几篇文章:

Win7系统64位环境下使用Apache——Apache2.2下载

Win7系统64位环境下使用Apache——Apache2.2安装及常见问题解决

Win7系统64位环境下使用Apache——Apache2.4版本安装及卸载

Win7系统64位环境下使用Apache——下载mod_jk

这几篇文章分别讲解了Apache以及mod_jk的下载,今天就来说说具体的应用了,Apache2.4整合Tomcat与mod_jk。

在介绍之前,还是有必要再说一下Apache、tomcat、mod_jk之间的关系。

1 Apache、tomcat、mod_jk之间的关系

先讲一下Apache、tomcat、mod_jk这三者之间的关系。

Apache:这里指的是httpd,Web服务器,用来处理静态文件。

tomcat:应用服务器,是servlet、jsp(jsp在后面其实也是被解释成servlet)的运行容器,可以处理servlet、jsp这些动态文件,当然也可以处理静态文件,但是性能不如Apache、nginx这些web服务器性能好。虽然一般还是单独使用web服务器来处理静态文件,应用服务器处理动态文件。

mod_jk:是tomcat提供的、用来连接Apache与tomcat的一个插件,默认下载的tomcat中是没有的,需要单独下载。

2 预期效果

来说一下我们想达到的效果。现在我们有一个Apache,两个tomcat,为了说的典型一点,我们假设这三个系统都部署在一台硬件服务器上,做实验嘛。当然如果换成独立服务器时原理是一样的,只需要修改ip的配置。

通过域名:

one.test.com

可以经过Apache访问第1台tomcat:

apache-tomcat-6.0.51-1

而通过域名:

two.test.com

可以经过Apache访问第2台tomcat:

apache-tomcat-6.0.51-1

3 修改Hosts

修改Hosts的目的是使得域名

one.test.com

two.test.com

访问本地ip。

Hosts文件位于:

C:\Windows\System32\drivers\etc

目录下。在里面插入内容:

127.0.0.1 one.test.com two.test.com

就可以了。

之后如果输入:

http://one.test.com

或者:

http://two.test.com

就都访问本地的

127.0.0.1

的80端口了,而这正指向了本地的Apache2.4。

4 整合

4.1 配置tomcat

Apache是对外的,它占用的端口号肯定是80了,默认也是。

而对于tomcat,我们这里先对第一个tomcat进行配置,假设将其命名为apache-tomcat-6.0.51-1(当然第二个就命名为apache-tomcat-6.0.51-2)。打开apache-tomcat-6.0.51-1的server.xml文件,即:

${apache-tomcat-6.0.51-1}/conf/server.xml

在里面配置端口和工程的位置,这里所说的工程就是你所要部署在tomcat中的项目。内容如下:

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

<Server port="9015" shutdown="SHUTDOWN">

    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
    <Listener className="org.apache.catalina.core.JasperListener" />
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
    <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

    <GlobalNamingResources>

    <Resource name="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">

    <Connector port="9110" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

    <Connector port="9019" protocol="AJP/1.3" redirectPort="8443" />

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

    <Realm className="org.apache.catalina.realm.LockOutRealm">

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

    <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

        <Context
            path=""
            docBase="E:\Project1\WebRoot"
            reloadable="true" >
        </Context>

    </Host>
    </Engine>
  </Service>
</Server>

为了规范并内容,这里我把所有的注释都删掉了,但是你在apache-tomcat-6.0.51的环境下是可以直接拿来用的。所有内容如图所示:

另一个tomcat有前面一个的配置是类似的不同的是把端口号:

9015

9110

9019

分别改为了:

8015

8110

8019

工程目录从:

E:\Project1\WebRoot

改为了:

E:\Project2\WebRoot

4.2 配置Apache与mod_jk

首先,假设Apache2.4的安装目录为:

${Apache2.4}

那么进入${Apache2.4},确保里面有httpd.conf文件,如图:

打开httpd.conf这个文件,需要做2件事:

4.2.1 httpd-vhosts.conf

确保以下脚本:

Include conf/extra/httpd-vhosts.conf

没有被注释掉,如图:

因为系统会用到

${Apache2.4}/conf/extra/httpd-vhosts.conf

文件的内容。

这里多说一句,有的人习惯于在:

${Apache2.4}/conf

目录下重新建立一个名为:

vhosts.conf

的文件,然后再在

${Apache2.4}/conf/httpd.conf

文件的最后加入以下内容:

Include conf/vhosts.conf

这其实是没必要的。直接使用:

${Apache2.4}/conf/extra/httpd-vhosts.conf

就可以了,效果都是一样的。

4.2.2 引用mod_jk.conf

这个时候要用到我们之前在文章Win7系统64位环境下使用Apache——下载mod_jk中提到的mod_jk了,需要进行对mod_jk的配置。

首先在文件:

${Apache2.4}/conf/httpd.conf

的最后加入脚本:

Include conf/mod_jk.conf

如图:

4.2.3 添加mod_jk.conf内容

然后在:

${Apache2.4}/conf

目录下创建文件:

mod_jk.conf

文件内容如下:

LoadModule jk_module modules/mod_jk.so
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"

如图所示:

这里有两个地方比较重要,第一个是:

LoadModule jk_module modules/mod_jk.so

这是指明mod_jk.so文件的引用位置。

第二个是:

JkWorkersFile conf/workers.properties

这是在指明workers.properties文件的引用位置。workers.properties文件的作用后面会说。

4.2.4 添加workers.conf

4.2.4.1 workers.conf的作用

先说说workers.conf是干什么的。其实这个问题我在文章Win7系统64位环境下使用Apache——下载mod_jk中已经提到过了,在官网链接中曾经提到过workers.conf的作用,如图:

它的作用,简单来说,就是有的时候我们只有一个Apache,但是有多个tomcat。我们需要在这个Apache中将不同的ip或不同的域名指向到不同的tomcat服务器中,这时我们就需要使用workers.properties了。这个链接里有对workers.properties的详细介绍。

4.2.4.2 创建workers.conf文件

在目录:

${Apache2.4}/conf

下创建文件:

workers.conf

如图:

4.2.4.3 配置workers.conf

好了,tomcat配好了,就可以在workers.conf中配置。我们想要达到的目的是,通过域名:

one.test.com

借助Apache,访问到:

apache-tomcat-6.0.51-1

通过域名:

two.test.com

借助Apache,访问到:

apache-tomcat-6.0.51-2

当然这里要在本地配置虚拟主机,使得可以通过域名直接访问本地ip,这个后面再说。

目前我们要在文件:

${Apache2.4}/conf/workers.conf

中加入以下内容:

worker.list=one,two
# Set sso
worker.one.type=ajp13
worker.one.host=127.0.0.1
worker.one.port=9019
worker.one.lbfactor=50
worker.one.cachesize=80
worker.sso.cache_timeout=600
worker.one.socket_keepalive=1
worker.sso.recycle_timeout=300
#worker.one.max_packet_size=65536

# Set portal
worker.two.type=ajp13
worker.two.host=127.0.0.1
worker.two.port=8019
worker.two.lbfactor=50
worker.two.cachesize=80
worker.portal.cache_timeout=600
worker.two.socket_keepalive=1
worker.portal.recycle_timeout=300

能够看到:

worker.one.type

指向的就是在:

http://tomcat.apache.org/connectors-doc/

中提到的ajp13协议。

而:

worker.one.host

指向的是本地ip。

接着:

worker.one.port

指向的是tomcat的server.xml中第二个Connector中的端口号。其它参数的意义可以到官网去找详细的解释,这里就不赘言了。

4.3 配置Apache的虚拟主机

好了,到目前为止,我们可以说是万事俱备,只欠东风。Apache2.4、Tomcat、mod_jk该配置的我们都配置了,目前要做的就是让mod_jk功能生效,Apache2.4就可以与Tomcat整合在一起并且可以通过域名访问了。

配置虚拟主机,从效果上来说,就是直接通过域名访问本地服务,之前提到了文件:

${Apache2.4}/conf/extra/httpd-vhosts.conf

现在httpd-vhosts.conf该配上用场了。

在httpd-vhosts.conf文件中加入内容:

<VirtualHost *:80>
    ServerName one.test.com
    JkMount /* one
    ErrorLog "logs/one-error_log"
    CustomLog "logs/one-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerName two.test.com
    JkMount /* two
    ErrorLog "logs/two-error_log"
    CustomLog "logs/two-access_log" common
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "D:\apache-tomcat-6.0.51-file"
    ServerName   file.test.com
    ErrorLog logs/file-error_log
    CustomLog logs/file-access_log combined
    <Directory "D:\apache-tomcat-6.0.51-file">
        Require all granted
    </Directory>
</VirtualHost>

其完整内容如下:

#
# Virtual Hosts
#
# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:http://httpd.apache.org/docs/trunk/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.

#
# Use name-based virtual hosting.
#

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#

# NOTE
# First Virtual Host MUST be a shallow duplicate of the main host
# in httpd.conf. It will become the default host. Any request coming
# in that does not match any other VirtualHost's ServerName will be
# served by this host.

<VirtualHost _default_:80>
DocumentRoot "${SRVROOT}/htdocs"
#ServerName www.example.com:80
</VirtualHost>

# Add any other Virtual Hosts below

########### - start - ###########

<VirtualHost *:80>
    ServerName one.test.com
    JkMount /* one
    ErrorLog "logs/one-error_log"
    CustomLog "logs/one-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerName two.test.com
    JkMount /* two
    ErrorLog "logs/two-error_log"
    CustomLog "logs/two-access_log" common
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "D:\apache-tomcat-6.0.51-file"
    ServerName   file.test.com
    ErrorLog logs/file-error_log
    CustomLog logs/file-access_log combined
    <Directory "D:\apache-tomcat-6.0.51-file">
        Require all granted
    </Directory>
</VirtualHost>

########### - end - ###########

#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot "${SRVROOT}/docs/dummy-host.example.com"
#    ServerName dummy-host.example.com
#    ServerAlias www.dummy-host.example.com
#    ErrorLog "logs/dummy-host.example.com-error.log"
#    CustomLog "logs/dummy-host.example.com-access.log" common
#</VirtualHost>

#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host2.example.com
#    DocumentRoot "${SRVROOT}/docs/dummy-host2.example.com"
#    ServerName dummy-host2.example.com
#    ErrorLog "logs/dummy-host2.example.com-error.log"
#    CustomLog "logs/dummy-host2.example.com-access.log" common
#</VirtualHost>

删除没用的注释,如下图所示:

看到没,这里面的:

JkMount /* one

就是使mod_jk生效的脚本。本来域名:

one.test.com

跳转到应该是:

127.0.0.1

现在加上:

JkMount /* one

那么mod_jk就会引用:

workers.conf

发现应该转向到ip127.0.0.1的9010端口去,这样本地

apache-tomcat-6.0.51-1

上的工程就启动起来了。

而有的时候我们可能想在服务器上建个文件夹用来保存本地一些静态文件,如图中所示3那里就是指明路径的,其中3、4、5指明了本地文件夹的路径,而6是用来设置对目录的访问权限。

需要注意的是Apache2.4的设置与Apache2.2的设置在这里是有却别的。对于Apache2.4来说,我们看到这里这支撑了:

Require all granted

而Apache2.2时是设置成了:

Order allow,deny
Allow from all

如果对Apache2.4在这里进行了错误的设置是会出问题的,会报错:

Invalid command ‘Order‘, perhaps misspelled or defined by a module not included
in the server configuration

如图所示:

所以输入方式一定要注意。

这里参考了:

http://systembash.com/apache-2-4-upgrade-and-the-invalid-command-order-error/

http://httpd.apache.org/docs/2.4/upgrading.html

5 完成

ok,这样我们让Apache2.4整合Tomcat与mod_jk的工作就完成了。

Win7系统64位环境下使用Apache——Apache2.4整合Tomcat与mod_jk的更多相关文章

  1. Win7系统64位环境下使用Apache——Apache2.4版本安装及卸载

    转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/70255992 本文出自[我是干勾鱼的博客] 之前在Win7系统64位环境下使用A ...

  2. Win7系统64位环境下使用Apache——安装Apache2.4时报错“Invalid command Order”问题的解决

    之前在文章Win7系统64位环境下使用Apache--Apache2.4整合Tomcat与mod_jk提到了安装Apache2.4时有可能报错: Invalid command 'Order', pe ...

  3. Win7系统64位环境下使用Apache——下载mod_jk

    转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/70313329 本文出自[我是干勾鱼的博客] 之前在几篇文章: Win7系统64位 ...

  4. win7 64位环境下,为python2.7 安装pip

    第一步: 安装python并配置好环境变量 参见:http://blog.csdn.net/donggege214/article/details/52062855 第二步: 下载setuptools ...

  5. win7 64位环境下配置汇编环境和程序设计

    下载dosbox,并解压安装 下载地址: http://pan.baidu.com/s/1eRJbJAq 默认安装到C:\Program Files (x86)\DOSBox-0.74 安装成功后,双 ...

  6. GHOST WIN7系统64位经典优化版 V2016年

    来自系统妈:http://www.xitongma.com 深度技术GHOST win7系统32,64位经典优化版 V2016年3月 系统概述 深度技术ghost win7系统64位经典优化版适用于笔 ...

  7. [转]windows10 64位环境下安装mysql5.7.17

    今天以zip模式在windows10 64位环境下安装mysql5.7,到最后一步提示mysql服务无法启动. 安装步骤如下: 1.配置环境变量 我的电脑->属性->高级->环境变量 ...

  8. win7系统64位"禁用驱动程序签名强制"如何设置?

    换了Win7系统64位旗舰版的朋友是不是都发现了一点,以前32位Win7系统用的好好的小程序小应用,一下子就装不上了.这是由于Win7系统64位系统对于未有认证签名的驱动程序进行了限制安装,而大部分小 ...

  9. asp.net C# int 类型在32/64位环境下取值范围无变化

    最近在学习中突然想到,我在64位环境下,int取值范围是否有变化?为了检测这个结果,我做了以下这个测试:1.环境:win7旗舰版64位+vs2010 sp1(版本号:10.0.40219.1SP1Re ...

随机推荐

  1. is和==

    ==判断两个对象值是否相等 is表示两个变量是否指向一块对象

  2. Java伪代码示例

    学习并转载自https://www.cnblogs.com/z245894546/p/7535261.html import.java.大道至简.*; import.java.愚公移山.*; publ ...

  3. Zabbix Windos agent 安装

    系统:Windos 2008 R2 x64 服务:Zabbix_agents_3.0.4.win 一.安装Zabbix_agents_3.0.4.win 1.下载Zabbix_agents_3.0.4 ...

  4. 函数:生成1-n的随机数组,

    方法很笨,不过可行: #include <stdio.h> /** 功能:获取一个1-n的随机数数组,这些随机数都互不相同 ** 入参:n-表示最大随机数: *randArray -用于储 ...

  5. Qt查找孩子findChild

    转载自[http://blog.csdn.net/liang19890820/article/details/52118210] 简述 在Qt编程过程中,通常会有多个部件嵌套,而大多数部件都有父子依赖 ...

  6. Spring积累

    <tx:annotation-driven/>  (Spring的XML配置里两大Bean的声明之一) 那我们是否就可以在程序中所有被spring管理的类(@Controller.@Ser ...

  7. Java程序执行Linux命令(JSP运行其他程序)

    java程序中要执行linux命令主要依赖2个类:Process和Runtime 首先看一下Process类: ProcessBuilder.start() 和 Runtime.exec 方法创建一个 ...

  8. EF Code-First 学习之旅 级联删除

    级联删除是当删除主记录的时候会自动删除依赖的记录或者设置外键属性为null public class Student { public Student() { } public int Student ...

  9. Android -- 读写文件到内部ROM,SD卡,SharedPreferences,文件读写权限

    (内容整理自张泽华教程) 1. 概述 使用文件进行数据存储 首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过 ...

  10. Java中的逻辑运算符

    逻辑运算符主要用于进行逻辑运算.Java 中常用的逻辑运算符如下表所示: 我们可以从“投票选举”的角度理解逻辑运算符: 1. 与:要求所有人都投票同意,才能通过某议题 2. 或:只要求一个人投票同意就 ...