apache + mod_cluster + jboss 配置http压缩

    随着web应用的交互性越来越强,其占用的网络带宽问题也日益凸显,最近正好要上线一个web应用,压力测试下的网络流量大的惊人,于是开始考虑http压缩的问题。
    首先考虑的是mod_jk + jboss的环境,测试了一圈下来,发现mod_jk仅支持ajp协议,无法使用http压缩。后来了解到生产系统中用的是mod_cluster,于是又重新进行了测试,这次顺利搞定,压缩效果明显。
    相关配置方法如下:
1、mod_cluster-1.1.3
    下载mod_cluster,jboss官网下载对应平台的binaries,解压缩后里面就是一个apache httpd,初始的时候是没有httpd.conf文件的,运行bin目录下的installconf.bat,即可生成默认配置,该配置已经包含基本的mod_cluster配置,只需要修改对应的主机ip即可。具体如下:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule manager_module modules/mod_manager.so
LoadModule slotmem_module modules/mod_slotmem.so
LoadModule advertise_module modules/mod_advertise.so

# MOD_CLUSTER_ADDS
# Adjust to you hostname and subnet.
<IfModule manager_module>
  Listen 172.27.15.7:6666
  ManagerBalancerName mycluster
  <VirtualHost 172.27.15.7:6666>
    <Location />
     Order deny,allow
     Deny from all
     Allow from all
    </Location>

    KeepAliveTimeout 300
    MaxKeepAliveRequests 0
    
    AdvertiseFrequency 5
    
    #下面这两行会让管理界面显示的信息更详细
    ServerAdvertise On
    AllowDisplay On

    <Location /mod_cluster_manager>
       SetHandler mod_cluster-manager
       Order deny,allow
       Deny from all
       Allow from all
    </Location>
  </VirtualHost>
</IfModule>

    这里需要注意的是,mod_cluster的管理界面是这样写的:Location /mod_cluster_manager,网上搜到的很多配置里面都是mod_cluster-manager,就是最后一个下划线和横线的区别,如果你按照网上的写法http://ip:6666/mod_cluster-manager访问,那就坑爹了(始终打不开界面,还以为是httpd的配置有问题)。
    配置好以后启动,访问http://ip:6666/mod_cluster_manager,就可以看到mod_cluster的管理界面了,详细信息里面有Protocol supported: http AJP,说明同时支持http协议和AJP协议。
    另外,将上面的这段配置拷贝到已有的apache中也是一样的。
2、jboss-eap-5.0
    下载mod_cluster的java bundles,解压缩后里面有:
    mod_cluster.sar - 用于jboss配置
    JBossWeb-Tomcat - 用于Tomcat环境下的jar包(这里不需要)
    demo - mod_cluster的负载均衡测试demo,包括server和client
   
    将mod_cluster.sar拷贝到JBOSS_HOME/server/default/deploy目录下,为了测试简单,将mod_cluster.sar\META-IN\mod_cluster-jboss-beans.xml里面ModClusterListener的ContainerEventHandler由HAModClusterService改为ModClusterService,这样就可以不用配置更复杂的HA了。
    修改JBOSS_HOME/server/default/deploy/jbossweb.sar/server.xml,添加一个listener:
<Listener className="org.jboss.modcluster.catalina.ModClusterListener" advertise="true"/>
    在<Service name="jboss.web">节点下添加:
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="node0">
    注:上面这一步是可选的,如果加了,在mod_cluster管理界面看到的就是“node0”,不加的话,看到的就是“node随机数”。
    如果想用demo做测试的话,还可以将demo/server/load-demo.war拷贝到jboss的deploy目录。
    启动jboss,启动完成后,刷新mod_cluster管理界面,可以看到,下面多了一个节点node0,说明配置成功了。但是这时仔细看节点的信息,可以看到节点名称后面写着mod_cluster连接jboss的url,默认是使用ajp协议的。比如,我的节点信息就是:
Node node0 (AJP://ip:8209)。
3、http压缩
    如果想使用http压缩,则首先需要解决上面的问题,即让mod_cluster通过http协议连接jboss,而不是通过AJP协议。我查了mod_cluster的User Guide发现上面是这样说的:
    Unlike mod_jk and mod_proxy_balancer, mod_cluster is not confined to AJP, but can use HTTP as well. While AJP is generally faster, an HTTP connector can optionally be secured via SSL. If multiple possible connectors are defined in your server.xml, mod_cluster uses the following algorithm to choose between them:
1. If an native (APR) AJP connector is available, use it.
2. If an AJP connector is available, use it.
3. Otherwise, choose the HTTP connector with the highest max threads.
    显然就是说,虽然mod_cluster支持AJP、http,但是这个不是可配置的,而是由mod_cluster根据the following algorithm选择的,这个算法就是,如果有AJP则优先选择AJP,否则才会选择http。
    因此,如果想利用jboss的http压缩,则需要让mod_cluster选择http,也就是说需要屏蔽掉所有的AJP connector。那么接下来的配置就简单了。首先注释掉AJP connector,然后在http connector上启用压缩,如下:
<Connector protocol="HTTP/1.1" port="8080" address="${jboss.bind.address}" 
     connectionTimeout="20000" redirectPort="8443" 
     compression ="on" compressionMinSize ="2048"  
     noCompressionUserAgents ="gozilla, traviata"  
     compressableMimeType ="text/html,text/xml,text/javascript,text/css,text/plain"/>
    <!--<Connector protocol="AJP/1.3" port="8009" address="${jboss.bind.address}"
         redirectPort="8443" />-->


    至此,所有的配置都配好了,重启jboss,利用网络流量查看工具或firefox + firebug之类的工具测试一下网络流量,发现和直接在jboss上配置压缩效果是一样的。

你可能感兴趣的:(apache,jboss,mod_cluster,http压缩)