nginx反向代理tomcat

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx反向代理tomcat相关的知识,希望对你有一定的参考价值。

回顾:tomcat配置和应用                
             

    server.xml, webapp的组织形式, 应用程序的部署, LAMT, LNMT, LNAMT;   
    server.xml:        <server>            <service>                <connector port="8080" />                <connector port="8009" protocol="AJP/1.3" />                <engine >                    <Host />                    <Host >                        <Context path="" docBase="" />                    </Host>                </engine>            </service>        </server>    
    webapp下需要建立的目录:        /        classes        lib        META-INF        WEB-INF    部署:        冷部署:        热部署:manager app, ant, tcd    注:tcd是一种tomcat的远程部署方式

                    
  会话保持的几种方式:
             1、session sticky      注: 会话粘性
                      source ip     注:  基于ip地址的会话保持
                      cookie        注: 基于cookie绑定
             2、session cluster:    注:session集群,不同节点之间可以通过session复制的方式来同步session    
             3、session server      注:  session服务器,专门建立一个服务器来保存session   
                                         session server上装一个memcache或者redis           
                                         它们是用key-value技术实现的
tomcat的负载均衡实现方式,
  1、 nginx做反向代理   nginx+tomcat
  2、 apache做方向代理  apache+tomcat
apache实现反向代3种方式需要的模块
    1、apache: 
                mod_proxy
                mod_proxy_http
                mod_proxy_balancer

              tomcat:
                http connector

    2 、apache: 
                 mod_proxy
                 mod_proxy_ajp
                 mod_proxy_balancer                

            tomcat:
                ajp connector

3、 apache:
                mod_jk
             tomcat:
                ajp connector

下面演示如果通过nginx实现反向代理tomcat

实验部署:
1、三个节点,第一个几点的ip地址为172.16.0.131,后两个几点分别为172.16.0.134和172.16.0.135

2、后两个节点分别准备jdk和tomcat的安装包

3、第一个节点安装nginx

具体步骤:

1、在172.16.0.134上

        # rpm -ivh jdk-8u151-linux-x64.rpm

        # tar xf  apache-tomcat-8.0.23.tar.gz -C  /usr/local/

        # cd /usr/local

        # ln -sv apache-tomcat-8.0.23  tomcat

        # vim /etc/profile.d/java.sh  
     添加如下内容
         export JAVA_HOME=/usr/java/latest
         export PATH=$JAVA_HOME/bin:$PATH

     # vim /etc/profile.d/tomcat.sh
       添加如下内容
       export CATALINA_HOME=/usr/local/tomcat
       export PATH=$CATALINA_HOME/bin:$PATH

     #  . /etc/profile.d/java.sh

     #  . /etc/profile.d/tomcat.sh

     配置tomcat的server.xml

    #  cd /usr/local/tomcat/conf

    #  cp server.xml  server.xml.bak

    # vim server.xml

    具体配置见下图

技术分享图片

技术分享图片

        # mkdir  -pv /data/webapps/ROOT

        # cd mkdir -pv /data/webapps/logs

        # mkdir -pv /data/webapps/ROOT/{classes,lib,META-INF,WEB-INF,}

        # vim index.jsp
        添加

技术分享图片

        # catalina.sh configtest

        # catalina.sh start
2、在172.16.0.135上

前面步骤和第一台主机设置一样,只是后面两张图中的内容要修改一下。

第一项修改默认的virtualhost的name选项

第二项修改defaulthost选项

第三项jvmRoute选项
3、在172.16.0.131上

        #yum install -y nginx

        #vim /etc/nginx/nginx.conf

        添加下面内容

技术分享图片

   #vim conf.d/default.conf

技术分享图片

    配置完成 

    # service nginx restart

     # ss -tnl  检查是否开启了80端口

     # 在浏览器中输入172.16.0.131/index.jsp

     如下效果

技术分享图片

技术分享图片

至此,基于nginx反向代理的tomcat配置完成。

基于apache反向代理的tomcat有三种方法实现在centos7上面
这里有点一定要说明,本来我在centos6上先通过编译安装httpd2.4实现apache的反向代理.
确发现开启了httpd的反向代理模块以后,httpd启动以后,怎么也找不到80端口.
我试了前后七八个小时,网上各种查资料.
最后得出结论,编译安装的httpd2.4.2和http2.4.28这两个版本想做反代都不能实现,我觉得这是一个及其重要的经验。
    第一种方法的实现:

    #/etc/httpd/conf/conf.d

    # vim vhost.conf
    t添加
    <proxy balancer://lbcluster1>
        BalancerMember http://172.16.100.68:8080 loadfactor=10 route=TomcatA
        BalancerMember http://172.16.100.69:8080 loadfactor=10 route=TomcatB
    </proxy>

    <VirtualHost *:80>
        ServerName web1.magedu.com
        ProxyVia On
        ProxyRequests Off
        ProxyPreserveHost On
        <Proxy *>
            Require all granted
        </Proxy>
        ProxyPass / balancer://lbcluster1/
        ProxyPassReverse / balancer://lbcluster1/
        <Location />
            Require all granted
        </Location>
    </VirtualHost>

      如果需要会话绑定:
        Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
        <proxy balancer://lbcluster1>
            BalancerMember http://172.16.100.68:8080 loadfactor=10 route=TomcatA
            BalancerMember http://172.16.100.69:8080 loadfactor=10 route=TomcatB
            ProxySet stickysession=ROUTEID
        </proxy>

        <VirtualHost *:80>
            ServerName web1.magedu.com
            ProxyVia On
            ProxyRequests Off
            ProxyPreserveHost On
            <Proxy *>
                Require all granted
            </Proxy>
            ProxyPass / balancer://lbcluster1/
            ProxyPassReverse / balancer://lbcluster1/
            <Location />
                Require all granted
            </Location>
        </VirtualHost>        

第二种方法的实现:

    #/etc/httpd/conf/conf.d

    # vim vhost.conf
    t添加

    #Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
    <proxy balancer://lbcluster1>
        BalancerMember ajp://172.16.100.68:8009 loadfactor=10 route=TomcatA
        BalancerMember ajp://172.16.100.69:8009 loadfactor=10 route=TomcatB
        ProxySet stickysession=ROUTEID
    </proxy>

    <VirtualHost *:80>
        ServerName web1.magedu.com
        ProxyVia On
        ProxyRequests Off
        ProxyPreserveHost On
        <Proxy *>
            Require all granted
        </Proxy>
        ProxyPass / balancer://lbcluster1/
        ProxyPassReverse / balancer://lbcluster1/
        <Location />
            Require all granted
        </Location>
    </VirtualHost>

 补充:mod_proxy_balancer模块内置的manager:
    <Location /balancer-manager>
      SetHandler balancer-manager
      Proxypass !
      Order Deny,Allow
      Allow from all
    </Location>    

第三种方式:
    mod_jk:额外编译安装

    (1) 反向代理
        模块配置文件:mod_jk.conf 
            LoadModule  jk_module  modules/mod_jk.so
            JkWorkersFile  /etc/httpd/conf.d/workers.properties
            JkLogFile  logs/mod_jk.log
            JkLogLevel  debug
            JkMount  /*  TomcatA
            JkMount  /status/  stat1

        workers配置文件:workers.properties
            worker.list=TomcatA,stat1
            worker.TomcatA.port=8009
            worker.TomcatA.host=172.16.100.68
            worker.TomcatA.type=ajp13
            worker.TomcatA.lbfactor=1
            worker.stat1.type = status

        注意:status的访问要做访问控制;

以上是关于nginx反向代理tomcat的主要内容,如果未能解决你的问题,请参考以下文章

nginx反向代理多个tomcat服务

tomcat+nginx实现反向代理和负载均衡

tomcat 配置nginx 反向代理

windows系统下配置Nginx反向代理多tomcat共享session

Nginx反向代理+Tomcat服务

nginx反向代理+tomcat域名绑定