0%

apache+tomcat实现负载均衡https

apache2.4+tomcat6实现负载均衡(windows版本)

软件准备

创建工作目录

  • 创建目录结构

    D盘建立文件夹Apache24和tomcats

    tomcats下分别建tomcat1和tomcat2文件夹

安装apache2.4

  • 解压httpd-2.4.28-Win64-VC15.zip放置到Apache24下

  • 打开Apache24\conf\httpd.conf

      搜索并替换全部c:/Apache24为d:/Apache24
    
  • 安装apache2.4

      cmd管理员下执行 cd D:\Apache24\bin
    
      httpd.exe -k install -n apache2.4
    
      卸载命令是sc delete apache2.4 
    

    安装完成,执行Apache24\bin\ApacheMonitor.exe,右键>start,启动apache2.4,浏览器输入localhost出现 it works! 则表明apache正常运行。

安装tomcat6

  • 将tomcat6解压并复制到tomcat1和tomcat2两个文件夹中(两个文件夹中的tomcat是一样的)

      依次打开tomcat/bin/startup.bat,浏览器地址栏输入localhost:8080,出现tomcat界面,则表明tomcat正常运行。
    

Apache2.4和tomcat负载均衡配置

  • 配置Apache24\conf\httpd.conf

  • 去掉以下7个模块前的#注释:

      LoadModule proxy_module modules/mod_proxy.so
      LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
      LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
      LoadModule proxy_http_module modules/mod_proxy_http.so
      LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
      LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
      LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
    
      ---------------------------------------------------------------------
      找到(279行):
      <IfModule dir_module>
          DirectoryIndex index.html
      </IfModule>
    
      修改成
      <IfModule dir_module>
          DirectoryIndex index.html index.jsp
      </IfModule>
    
      ----------------------------------------------------------------------
      
      文件最后添加(稍后tomcat里会做相关配置192.168.202在这里是本机ip,所以也可以写成127.0.0.1):
      #ProxyRequests Off
      <proxy balancer://cluster>
      BalancerMember ajp://192.168.202.1:8011 loadfactor=1 route=tomcat1
      BalancerMember ajp://192.168.202.1:8012 loadfactor=1 route=tomcat2
      </proxy>
      
      ------------------------------------------------------------------------
      
      # Virtual hosts
      #Include conf/extra/httpd-vhosts.conf
      改为
      # Virtual hosts
      Include conf/extra/httpd-vhosts.conf
    
  • httpd-vhosts.conf设置

  • 打开Apache24\conf\extra\httpd-vhosts.conf(请提前做好备份,以便配置错误时可以恢复)

      注释掉原有的<VirtualHost *:80></VirtualHost>两个代码块。
    
      添加
    
      <VirtualHost *:80>
          ServerAdmin webmaster@aa.com
          ServerName www.aa.com
          ServerAlias www.aa.com
          ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On
          ProxyPassReverse / balancer://cluster/
      </VirtualHost>
    
      ServerName www.aa.com可以通过修改windows的host文件来伪装。
      host文件位置:
      C:\Windows\System32\drivers\etc\host
      最后面添加    127.0.0.1       www.aa.com
    

配置tomcat1和tomcat2

  • 打开tomcat server.xml

      tomcats\tomcat1\conf\server.xml
    
      找到<Server port="8005" shutdown="SHUTDOWN">
      将tomcat1的port改为8006,tomcat的port改为8007
    
      --------------------------------------------------
      找到:
      
      <Connector port="8080" protocol="HTTP/1.1" 
         connectionTimeout="20000" 
         redirectPort="8443" />
    
      将8080改为8081,tomcat2的改为8082
    
      -------------------------------------------------------
      
      找到
    
      <Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />
    
      将8009改为8011,tomcat2的改为8012
    
      (和apache中配置的对应:
      BalancerMember ajp://192.168.202.1:8011 loadfactor=1 route=tomcat1
      BalancerMember ajp://192.168.202.1:8012 loadfactor=1 route=tomcat2
      )
    
      -----------------------------------------------------------
    
      找到:
    
      <Engine name="Catalina" defaultHost="localhost">
    
      改为:
    
      <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1">
    
      tomcat2中的改为:
    
      <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat2">
    
      这里同样时和
      BalancerMember ajp://192.168.202.1:8011 loadfactor=1 route=tomcat1
      BalancerMember ajp://192.168.202.1:8012 loadfactor=1 route=tomcat2
      对应的。
    
      -----------------------------------------------------------------
    
      找到
    
      <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->  
    
      在其下方添加
    
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  channelSendOptions="6">
      <Manager className="org.apache.catalina.ha.session.BackupManager"
               expireSessionsOnShutdown="false"
               notifyListenersOnReplication="true"
               mapSendOptions="6"/>
      <Channel className="org.apache.catalina.tribes.group.GroupChannel">
          <Membership className="org.apache.catalina.tribes.membership.McastService"
              address="228.0.0.4"
              port="45564"
              frequency="500"
              dropTime="3000"/>
          <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
              address="auto"
              port="5001"
              selectorTimeout="100"
              maxThreads="6"/>
          <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
          </Sender>
          <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
          <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
          <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
      </Channel>
    
      <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
          filter=".*/.gif;.*/.js;.*/.jpg;.*/.png;.*/.htm;.*/.html;.*/.css;.*/.txt;"/>
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
      </Cluster>
    
      注意:tomcat2中的port="5001"应该为5002
    
  • 测试

    至此,apache2.4和tomcat的负载均衡配置完毕。

    测试:

    将test_war.war放到tomcat1和tomcat2的webapps目录下,启动apache,再启动tomcat1和tomcat2,浏览器输入localhost/test_war/index.jsp,观察两个tomcat命令框的输出文字,会发现,浏览器多次访问,则由两个tomcat接替处理。

HTTPS的配置

上面已经配置并测试了apache2.4和tomcat的负载均衡,下面将继续配置https

  • 打开apache2.4的配置文件

      找到
      #LoadModule ssl_module modules/mod_ssl.so
    
      将其前面的注释#去掉,改为:
      #LoadModule ssl_module modules/mod_ssl.so
    
      ------------------------------------------------
    
      找到
      # Secure (SSL/TLS) connections
      #Include conf/extra/httpd-ssl.conf
    
      改为
    
      # Secure (SSL/TLS) connections
      Include conf/extra/httpd-ssl.conf
    
  • 打开Apache24\conf\extra\httpd-ssl.conf

      找到
    
      <VirtualHost _default_:443>
    
      添加
    
      ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On
      ProxyPassReverse / balancer://cluster/
    
      变成
    
      <VirtualHost _default_:443>
      #   General setup for the virtual host
      DocumentRoot "d:/Apache24/htdocs"
      ServerName localhost:443
      ServerAdmin admin@example.com
      ErrorLog "d:/Apache24/logs/error.log"
      TransferLog "d:/Apache24/logs/access.log"
      ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On
      ProxyPassReverse / balancer://cluster/
    
      -------------------------------------------------------
    
      将证书复制到apache\conf下
      server.crt
      server.csr
      server.key
    
  • 启动apache2.4,依次启动tomcat1和tomcat2,浏览器输入https://localhost/test_war/index.jsp发现https访问可以进行。

https证书获取方式

  • 自制证书

    待续…

  • 申请证书

    待续…