http://jackandroid.iteye.com/blog/627147
ajp是另外一个协议了,也就是tomcat里面那个默认8009端口监听的,平时很少用到。
http_proxy的方式,自己配置了一下,留档保存
[list]
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
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。
[/list]
这里补充个很恶心的东西:
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