设为首页 收藏本站
查看: 484|回复: 0

[经验分享] Apache配置tomcat负载和session粘连(stickysession)

[复制链接]

尚未签到

发表于 2017-1-9 09:10:34 | 显示全部楼层 |阅读模式
前面看到篇文章 介绍apache和tomcat关联负载的,说道:apache服务器和tomcat的连接方法其实有三种:JK、http_proxy和ajp_proxy。 并且介绍了使用JK的配置方式,链接见
http://jackandroid.iteye.com/blog/627147
ajp是另外一个协议了,也就是tomcat里面那个默认8009端口监听的,平时很少用到。
http_proxy的方式,自己配置了一下,留档保存

    1.Apache版本:Apache http server 2.2.22(真2...,理论上2.1以后都支持session sticky)
    2.Tomcat: tomcat 6.0.32*2,分别监听80和8089端口,并在webapps目录中放置hello目录和hello/index.html文件,文件内容设置成不一样的,用于待会儿测试区分访问的结果。
    3.安装(略)
    4.最简单的负载均衡:配置apache的conf/httpd.conf文件
    a.启用以下三个模块:
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
    LoadModule proxy_http_module modules/mod_proxy_http.so

    b.在最下方加入如下配置,并重启apache,注意各种斜杠和空格:
    ProxyRequests Off
    <Proxy balancer://mycluster>
    BalancerMember http://localhost:81/
    BalancerMember http://localhost:8089/
    </Proxy>
    ProxyPass / balancer://mycluster/

    c.直接访问localhost/hello,并刷新。会发现页面会在81和8089之间跳转。
    d.简单解释:启用proxy,负载,http_proxy模块,定义了个新的"mycluster"负载,这个名字可以换掉,并且发送的地址为81和8089
    5.stickysession负载配置
    a.解释:客户A第一次访问被分配到81端口的tomcat并且登陆了,第二次访问时候访问到了8089,结果就坑了,因为8089的tomcat并没有session。 解决方式有两种,第一种是session共享,第二种就是stickysession session粘连,就是说用户一旦访问了某个tomcat,就给他个cookie,让他在后面的请求都访问那个tomcat。
    b.session Sticky 可以考虑使用tomcat自己的jsessionid那个cookie,我们这里使用apache的http-header这个模块,由apache来自动生成cookie,配置如下:
    补充启用header模块:
    LoadModule headers_module modules/mod_headers.so

    proxy配置修改为:
    Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
    ProxyRequests Off
    <Proxy balancer://mycluster>
    BalancerMember http://localhost:81/ route=server1
    BalancerMember http://localhost:8089/ route=server2
    </Proxy>
    ProxyPass / balancer://mycluster/ stickysession=ROUTEID


    header那行用于自动生成cookie
    ProxyPass那行 最后的stickysession=ROUTEID,表示从cookie中读取ROUTEID,并自动分配到相应的服务上去。
    c. 访问localhost/hello 会发现浏览器自动生成了ROUTEID这个Cookie,并且刷新后还是保留在那个tomcat, 删除cookie并刷新,则可能会到其他tomcat。


这里补充个很恶心的东西:
Apache的Restart不能完全重新加载修改后的conf文件,重启Apache最好先Stop再Start。
后续要写个反向代理的blog。
其实反向代理就是使用如下命令:
ProxyPassReverse /web/ balancer://mycluster/web/
目的是让浏览器中的URL始终是代理的URL,而不是具体Tomcat的URL。即使网页中锚点的重定向(当然要相对路径),或是http302,都能使用代理的URL作为基准。
另外补充一点,如果使用官方文档
https://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html
使用后台生成Cookie route机制(Details on load balancer stickyness这一节),比如Tomcat,那么stickysession要配置如下,即依赖Tomcat的SessionId:
ProxyPass /web/ balancer://mycluster/web/ stickysession=JSESSIONID|jsessionid scolonpathdelim=On
但是这种情况下必须要打开Tomcat的engine节点的jvmRoute属性才能生效,如果只修改apache不修改tomcat的话,sessionID还是会不停的随机生成。
还有一个说法是apache里面配置的这个path要和tomcat项目path一致,这个没验证过。

再补充一点东西,配置完反向代理之后,你在每个Tomcat使用request.getRequestURL()拿到的都是自己的physical URL,而不是反向代理的URL,需要加上以下配置:
ProxyPreserveHost on
就能让每个Tomcat获得的请求都是用户浏览器访问反向代理的那个URL了。
另外有个参数没细看呢:SSLProxyEngine on

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-325791-1-1.html 上篇帖子: Windws 环境下 Apache + Tomcat + Mod_jk 集群配置 下篇帖子: Apache POI:Java程序读写Microsoft Office格式文档-1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表