1. 程式人生 > >nginx反向代理tomcat

nginx反向代理tomcat

text vhost image index.jsp reverse level gte lamt 反代

回顧: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