日期:2014-05-17 浏览次数:20934 次
apache 和 tomcat 连接有三种方式 :1.JK ,2 .http_proxy ,3. ajp_proxy 。之前看到robbin在一个帖子里说 jk的连接方式已经淘汰了,貌似apache官网还是有jk的更新,由于我们网站之前用的是jk, 所以暂时还是用jk的方式。 有机会可以测试下jk 和ajp_proxy到底哪种方式更好些。 根据这几天对apache的了解,我记录下JK的连接方式。 装完apache和tomcat后,把mod_jd.so文件拷贝到apache/modules目录下,在httpd.conf中加一句 LoadModule jk_module modules/mod_jk.so,告诉服务器装载jk模块。 准备两个配置文件,workers.properties和uriworkermap.properties ,分别放在conf目录下。 在httpd.conf里指明这两个文件的位置: <IfModule jk_module> JkWorkersFile conf/workers.properties JkMountFile conf/uriworkermap.properties JkLogFile logs/mod_jk.log </IfModule> workers.properties文件的内容如下: worker.list=loadbalancer worker.balaweb54_1.port=2009 worker.balaweb54_1.host=localhost worker.balaweb54_1.type=ajp13 worker.balaweb54_1.lbfactor=1 worker.balaweb54_1.socket_keepalive=1 worker.balaweb54_1.socket_timeout=0 worker.balaweb54_1.retries=3 worker.loadbalancer.type=lb worker.retries=3 worker.loadbalancer.balance_workers=balaweb54_1 worker.loadbalancer.sticky_session=true worker.loadbalancer.sticky_session_force=false 定义了一个名为balaweb54_1的worker,使用ajp13协议来通讯,apache连接tomcat的端口 是2009,host=localhost表示监听2009端口的主机是本机,lbfactor定义负载平衡的权 值,socket_keepalive这个值在web服务器和tomcat之间装有防火墙的时候需要用到,因为防火墙会丢掉处于 inactive状态的连接,如果设置了这个值为true(默认为false)的话,操作系统会不断的发KEEP_LIVE信息给这个连接,这 样的话,防火墙就不会丢掉这种处于inactive状态的连接,貌似这个属性对我们网站而言也用不上,用默认值就Ok了。 socket_timeout:就不介绍了。 上面还定义了一个type为lb的worker,表示有多个tomcat的时候,在多个tomcat之间均衡负载,这里只配置一个 tomcat,这负载全给这个tomcat , sticky_session官网的解释:Specifies whether requests with SESSION ID's should be routed back to the same Tomcat worker. If sticky_session is set to True or 1 sessions are sticky, otherwise sticky_session is set to False. Set sticky_session to False when Tomcat is using a Session Manager which can persist session data across multiple instances of Tomcat. sticky_session_force 的解释:Specifies whether requests with SESSION ID's for workers that are in error state should be rejected. If sticky_session_force is set to True or 1 and the worker that matches that SESSION ID is in error state, client will receive 500 (Server Error). If set to False or 0 failover on another worker will be issued with loosing client session. This directive is used only when you set sticky_session=True. “If set to False or 0 failover on another worker will be issued with loosing client session. This directive is used only when you set sticky_session=True.” 这句话不是很明白。貌似这两个值在只有一台tomcat服务器的时候,用默认值就Ok了。 我觉得在只有一个tomcat的时候,这两个sticky的配置完全可以删掉。 uriworkermap.properties文件的内容如下: /*.do=loadbalancer /*.jsp=loadbalancer /dwr/*=loadbalancer /servlet/*=loadbalancer !/*.shtml=loadbalancer !/*.html=loadbalancer !/*.js=loadbalancer !/*.css=loadbalancer !/*.jpg=loadbalancer !/*.gif=loadbalancer loadbalancer即workers文件里面定义的loadbalancer,/*.do ,/*.jsp , /dwr/* , /servlet/* 这几个表示这样的动态 请求交给loadbalancer处理,而shtml ,html ......这些不交给loadbalancer处理,即由 apache处理,这就验证了开始 说的,静态请求有apache处理,动态请求由tomcat处理,!/*.shtml=loadbalancer ,感 叹号!表示 "非"的意思。