• 青蛙学Linux—Apache+Tomcat实现动静分离以及负载均衡


    Apache+Tomcat的架构可以充分发挥各自的优点,消除各自的缺点。Apache做为一个高效的Web服务器只支持静态网页,无法处理动态网页,而Tomcat可以处理基于JAVA的动态页面,却在静态页面的处理上效率不高;Apache的配置简单,功能强大,而Tomcat的可配置性差,且性能无法与Apache相提并论。

    1、Apache与Tomcat的连接器

    Apache通过连接器与Tomcat进行连接,常用的连接器有以下四种:

    • mod_jk2:比较早的一种连接器,在动静页面过滤上可以使用正则表达式,配置灵活。但是mod_jk2已经没有开发人员支持,停止版本更新了
    • mod_jk:mod_jk2的继承者,支持Apache 1.x和Apache 2.x版本,是最常用的也是效率最高的连接器
    • proxy_ajp:专门为整合Tomcat而开发的一个连接器,通过ajp协议代理对于Tomcat的请求
    • http_proxy:通过普通反向代理的方式与Tomcat进行连接,实现的功能少且效率低

    这里将介绍通过mod_jk连接器来连接Tomcat。

    2、Apache+Tomcat实现动静分离

    这里通过一个例子的方式来介绍Apache+Tomcat来实现Web的动静分离。

    实验环境:

    • 操作系统CentOS 7.6.1810,IP地址192.168.0.88
    • JDK版本1.8.0_191,安装路径/usr/local/jdk
    • Tomcat版本8.5.37,安装路径/usr/local/tomcat
    • Apache版本2.4.37,安装路径/usr/local/httpd
    • Tomcat Connectors(mod_jk)版本1.2.46

    Apache与Tomcat安装在同一台主机,通过mod_jk进行连接,实现Web的动静分离。

    2.1、安装JDK和Tomcat

    JDK和Tomcat的安装参考https://www.cnblogs.com/yu2006070-01/p/10223656.html

    2.2、安装Tomcat Connectors(mod_jk)

    这里我们使用Tomcat Connectors的源码进行安装,安装前先通过YUM安装以下依赖包:

    [root@localhost apps]# yum install libtool autoconf

    解压Tomcat Connectors源码包并进入源码目录,Tomcat Connectors的源码安装有所不同,必须先通过源码目录下的native目录中的buildconf.sh脚本生成configure脚本后才可以进行编译安装:

    [root@localhost tomcat-connectors-1.2.46-src]# cd native/
    [root@localhost native]# ./buildconf.sh

    执行configure,并调用Apache的apxs来生成一个Apache模块:

    [root@localhost native]# ./configure --with-apxs=/usr/local/httpd/bin/apxs

    configure运行完毕无报错后,执行:

    [root@localhost native]# make && make install

    命令执行完毕后将会在Apache安装目录下的modules目录中生成一个名为mod_jk.so的模块文件,至此,Tomcat Connectors安装完毕。

    2.3、使用mod_jk连接器

    要使用mod_jk必须先在Apache中启用mod_jk.so模块,在httpd.conf文件中添加:

    LoadModule jk_module modules/mod_jk.so

    继续向httpd.conf中添加如下配置:

    JkWorkersFile /usr/local/httpd/conf/workers.properties
    JkMountFile /usr/local/httpd/conf/uriworkermap.properties
    JkLogFile /usr/local/httpd/logs/mod_jk.log
    JkLogLevel info
    JkLogStampformat "[%a %b %d %H:%M:%S %Y]"
    • JkWorkersFile:定义Tomcat workers配置文件,在该文件中可以定义连接到哪台运行Tomcat的主机
    • JkMountFile:定义Tomcat workers的URL映射文件,即页面过滤规则
    • JkLogFile:定义mod_jk的日志文件
    • JkLogLevel:定义mod_jk的日志输出等级
    • JkLogStampformat:定义mod_jk的日志输出格式

    接下来需要创建Tomcat workers。Tomcat workers是一个服务于Web Server、等待执行servlet/JSP的Tomcat实例。Tomcat workers需要workers.properties、uriworkermap.properties和mod_jk.log三个文件,mod_jk.log会在Apache启动时自动创建,这里只需要创建workers.properties和uriworkermap.properties即可。

    workers.properties配置文件

    workers.properties文件用于指定连接一台或一组Tomcat主机,配置如下(这里设置连接本机的Tomcat):

    worker.list=tomcat1            # 定义一台或一组Tomcat主机
    worker.tomcat1.port=8009       # 连接Tomcat的端口,mod_jk通过ajp协议连接Tomcat,默认端口为8009
    worker.tomcat1.host=localhost  # Tomcat主机的IP地址或主机名
    worker.tomcat1.type=ajp13      # 连接Tomcat时使用的方式,常用的值有:ajp13 - 常用;lb - 负载均衡;status - 状态页
    worker.tomcat1.lbfactor=1      # Tomcat主机的权重
    uriworkermap.properties配置文件

    uriworkermap.properties是Tomcat worker的URL映射文件,用来定义哪些URL由Tomcat处理,哪些由Apache处理;mod_jk会定期检查该文件是否有更新,单独使用该文件可以在修改规则之后不用重启Apache;该文件支持正则。

    这里配置.html、.jpg、.css、.js交由Apache处理,其他全部交由Tomcat处理,配置如下:

    /*=tomcat1
    !/*.html=tomcat1
    !/*.jpg=tomcat1
    !/*.css=tomcat1
    !/*.js=tomcat1

    注意:!表示取反,具有高优先级

    2.4、Apache配置虚拟主机

    在Apache中配置一个域名为www.abc.com的虚拟主机,虚拟主机根目录为/data/www.abc.com:

    <VirtualHost *:80>
        ServerAdmin xxx
        DocumentRoot "/data/www.abc.com"
        ServerName www.abc.com
        ServerAlias abc.com
        ErrorLog "logs/www.abc.com-error_log"
        CustomLog "logs/www.abc.com-access_log" common
        <Directory "/data/www.abc.com">
            Options Indexes FollowSymLinks
            AllowOverride None
            Require all granted
        </Directory>
        JkMountFile /usr/local/httpd/conf/uriworkermap.properties
    </VirtualHost>

    2.5、Tomcat配置虚拟主机

    Tomcat中的虚拟主机必须配置与Apache的虚拟主机相同的域名,并且根目录必须指向Apache对应虚拟主机的根目录。配置如下:

    <Host name="www.abc.com"  appBase="webapps"
          unpackWARs="true" autoDeploy="true">
      <Context path="" docBase="/data/www.abc.com"/>
    </Host>

    2.6、验证配置

    在/data/www.abc.com目录下有index.html和info.jsp两个文件,info.jsp文件为JSP探针文件,index.html文件内容如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h3>www.abc.com</h3>
    <h4>这是一个虚拟主机</h4>
    </body>
    </html>

    此时,配置完mod_jk模块后尚未重启Apache,配置还未生效,这里首先分别访问Apache和Tomcat的虚拟主机:

    www.abc.com

    1

    www.abc.com:8080/info.jsp

    5

    重启Apache使mod_jk模块生效,然后访问:

    www.abc.com

    3

    www.abc.com/info.jsp

    4

    3、Apache+Tomcat实现Tomcat的负载均衡

    3.1、共享虚拟主机根目录

    多台Tomcat可通过NFS共享一个虚拟主机根目录。注意,每台Tomcat访问NFS时使用的UID和GID应该一致,以避免权限的问题。

    3.2、workers.properties配置

    这里添加了一台IP地址为192.168.0.110的Tomcat主机与当前主机结合实现负载均衡,此时需要修改workers.properties文件的内容,如下:

    worker.list=loadbalancer
    worker.tomcat1.port=8009
    worker.tomcat1.host=192.168.0.88
    worker.tomcat1.type=ajp13
    worker.tomcat1.lbfactor=1
    worker.tomcat2.port=8009
    worker.tomcat2.host=192.168.0.110
    worker.tomcat2.type=ajp13
    worker.tomcat2.lbfactor=1
    work.loadbalancer.type=lb
    work.loadbalancer.balance_workers=tomcat1,tomcat2

    3.3、uriworkermap.properties配置

    由于我们修改了worker名称,所以uriworkermap.properties文件也必须做相应的更改,内容如下:

    /*=loadbalancer
    !/*.html=loadbalancer
    !/*.jpg=loadbalancer
    !/*.js=loadbalancer

    至此,Tomcat的负载均衡配置完毕。

    4、mod_jk自带监控页的启用

    与Apache一样,mod_jk也自带了一个状态监控页,可以通过以下配置启动:

    # 在workers.properties文件中进行配置
    worker.自定义名称.type=status  # 定义这个worker为状态监控
    worker.自定义名称.mount=URL    # 通过这里指定的URL可以访问监控页
    # 设置完成后在worker.list中进行调用即可
  • 相关阅读:
    12
    11-常用模块
    10-异常处理
    C#程序关闭时怎么关闭子线程
    [转]Android加载图片堆栈溢出
    [转]JS弹出确认/取消对话框
    [整理]获取当前页面的网址
    C/C++多参数处理
    图标素材网站收集
    PHP "Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0" 错误
  • 原文地址:https://www.cnblogs.com/yu2006070-01/p/10315126.html
Copyright © 2020-2023  润新知