apache资源服务器+负载均衡
最近的项目的环境是前台web有4台服务器,每台机子上都装有weblogic和apache,weblogic发布web项目,apache上主要是web项目的图片、js、css已经静态网页。在这4台服务器的前端放了个负载均衡的服务器,用户的请求通过这个负载均衡服务器分发到web服务器以及apache 。负载均衡服务器会过滤用户请求url,如果是带/resources/的请求就丢给web服务器的9000端口,也就是apache服务器监听的端口,这样apache通过隐射取到资源返回。如果url不带/resources/则丢给9001的weblogic来处理。apache上的静态网页是后台一套系统人为控制生成的。web项目中有一个页面a.ftl通过iframe包含这些静态页面:
<div id="divFrameRight">
<iframe id="_iframe" name="_iframe" src="#" width="100%" FRAMEBORDER="0" SCROLLING="no" ></iframe>
</div>
其他页面跳转到a页面时会传过来iframe要包含的页面地址,如:
http://xx.xx.xx.xx/page/ftl/a.ftl?url=http://xx.xx.xx.xx/resource/cache/2/abcd43748977.html
a.ftl得到请求的url,把resource替换成resources,然后把该url给iframe,iframe加载页面:
document.getElementById("_iframeId").src = url;
这样做在公司的测试环境(一台服务器上装weblogic和apache,没有负载均衡)没有问题,放在生产环境却出现了问题,iframe在加载页面时会报404找不到页面的错误,右键刷新iframe中的页面,页面才能出来。
分析后猜想是js控制iframe的src发出的请求负载均衡是丢给weblogic来处理的,所以没有找到页面。重新刷新才丢给apache来处理。至于为什么负载均衡为什么会把带/resources/的url丢给weblogic来处理,不是很明白。
在ftl中得到url,并处理url,直接付给iframe即解决问题:
<iframe id="_iframe" name="_iframe" src="${strURL}" width="100%" FRAMEBORDER="0" SCROLLING="no" ></iframe>
不是很明白原因,解决办法是通过不断的测试发现的。越是复杂的系统,诡异的问题越多。所以在每个环境的测试是很重要的,遇到了问题,观察发现推论排错也是很重要的,找到了关键点,能够把问题快速的解决才是上上策。
页:
[1]