• Apache Server与多个独立Tomcat集成


    取经自http://www.ramkitech.com/2012/03/virtual-host-apache-httpd-server-tomcat.html

    继续干Tomcat和Apache Server.

    继上次在单个Tomcat中配置Vritual Host以处理多个域名之后,我们在实际中还会遇到以下情景:

      部门A,B,C各自有一套Tomcat和server,通常情况下,会各自购买域名服务。从统一管理和降低成本来说,可以只需要一套域名服务。

      这就需要用到Apache Server集中所有域名请求,再根据内部逻辑进行转发给相应的Tomcat server。

     盗图一枚(来自取经处)

    Apache Server,Tomcat都是现成的,剩下的依旧是如何配置...(为什么好产品都是美呀的写的?!)

    1. 虚拟机CentOS7安装Apache HTTP Server (httpd-2.4.23)(略过)

    2. Win7和虚拟机CentOS7安装Tomcat (apache-tomcat-8.5.4)(略过)(假定部门A使用CentOS7 Tomcat,部门B使用Win7 Tomcat)

    3. 模拟DNS域名解析:

      假定部门A,B的域名分别为www.A.com, www.B.com

      由于Apache Server位于CentOS7上,修改CentOS7下的hosts文件(/etc/hosts)。

      增加以下内容:  

    Your Apache Server IP  www.A.com
    Your Apache Server IP  www.B.com

      这样,在浏览www.A.com, www.B.com时,请求会被Apache Server接收。

    4. 建立Apache Server与各个Tomcat的通信

      1. Tomcat支持AJP协议,所以为Apache Server安装mod_jk以同样支持AJP。

        下载tomcat-connectors-1.2.41-src.tar.gz,然后tar -zxvf...,之后参考以下命令:    

    cd native
    ./configure --with-apxs=Your Apache Server Path/bin/apxs
    make
    make install

        检查Your Apache Server Path/modules中,是否有mod_jk.so

      2. 配置mod_jk联接

        在Your Apache Server Path/conf中,编辑httpd.conf。增加以下内容,

    LoadModule jk_module modules/mod_jk.so
    
    JkWorkersFile conf/workers.properties
    
    JkLogFile logs/mod_jk.log
    JkLogLevel emerg
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
    JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
    JkRequestLogFormat "%w %V %T"
    
    #delegate http requests from httpd to tomcat
    JkMount /tomcatlinux* tomcat-centos
    JkMount /tomcatwindows* tomcat-windows

        从增加内容可知,还需要在conf下创建workers.properties

      3. 创建workers.properties

    worker.list=tomcat-centos,tomcat-windows
    
    worker.tomcat-centos.type=ajp13
    worker.tomcat-centos.port=8009
    worker.tomcat-centos.host=Tomcat IP on CentOS
    
    worker.tomcat-windows.type=ajp13
    worker.tomcat-windows.port=8009
    worker.tomcat-windows.host=Tomcat IP on Windows

    5. 根据httpd.conf中增加的JkMount部分,需要在CentOS Tomcat的webapps下添加tomcatlinux文件夹和index.html;同样在Win7 Tomcat的webapps下添加tomcatwindows文件夹和index.html。

    6. 启动Apache Server和Tomcat,测试。

      请求www.A.com/tomcatlinux/index.htmlwww.B.com/tomcatwindows/index.html

        注意在本例中,所有请求是由CentOS的浏览器完成(因为/etc/hosts添加了A,B域名)

    7. 以上的配置有两个问题:

      1. www.B.com/tomcatlinux会访问到部门A的tomcatlinux application;而且www.A.com/tomcatwindows会访问到部门B的tomcatwindows application;

       这是绝对不合理的!

      2. 在请求中,包含了application名称tomcatlinux和tomcatwindows。实际中,应将application名称隐藏。

      解决方案:配置Apache Server的Virtual Host。

        继续编辑httpd.conf,先删掉JkMount部分,用以下部分替代。

        1. 配置Virtual Host,解决问题1。

    NameVirtualHost *:80
    
    <VirtualHost *:80>
        ServerName www.A.com
        JkMount /tomcatlinux* tomcat-centos
    </VirtualHost>
    
    <VirtualHost *:80>
        ServerName www.B.com
        JkMount /tomcatwindows* tomcat-windows
    </VirtualHost>

        2. 配置Virtual Host,解决问题1和2。

    NameVirtualHost *:80
    
    <VirtualHost *:80>
         ServerName www.A.com
         RewriteEngine on 
         RewriteLog logs/apache-mod_rewrite
         RewriteRule ^/(.*)$ /tomcatlinux/$1 [L,PT]
         JkMount /* tomcat-centos
    </VirtualHost>
    
    <VirtualHost *:80>
         ServerName www.B.com
         RewriteEngine on 
         RewriteLog logs/apache-mod_rewrite
         RewriteRule ^/(.*)$ /tomcatwindows/$1 [L,PT]
         JkMount /* tomcat-windows
    </VirtualHost>

      请求www.A.com/index.htmlwww.B.com/index.html测试,效果一样。

    Done!

    清醒时做事,糊涂时读书,大怒时睡觉,独处时思考; 做一个幸福的人,读书,旅行,努力工作,关心身体和心情,成为最好的自己 -- 共勉
  • 相关阅读:
    [Swoole系列入门教程 5] UDP协议和demo
    [Swoole系列入门教程 3] 心跳检测
    [Swoole系列入门教程 1] CentOs 上的Swoole安装
    PHP CURL 异步测试
    layui 表格点击图片放大
    Laravel 指定日志生成目录
    联系我
    npm config set registry 与 cnpm的区别
    qq邮箱html邮件,图片不显示的问题
    qq邮箱问卷,测试不支持form表单
  • 原文地址:https://www.cnblogs.com/hello-yz/p/5771058.html
Copyright © 2020-2023  润新知