应用场景:
我要测试一个需求,用户访问源的调度器,调度器给代理服务器返回302,location地址为真正源的地址,调度器在中间实现个负载均衡的作用,由于源是别人的我无法控制源的返回值,而我还要对源返回的错误码情况进行测试,所以我想自己搭建个本地测试环境,源返回值自己控制
我的配置:
我的调度器和源都是nginx搭建的,开始想一台机器(ip:192.168.20.5,nginx服务端口为8080)又当调度器又当源,下面是302跳转配置:
在nginx.conf中的server中配置 rewrite ^/(.*) redirect;
我的代理服务器ats的配置:
remap.config: map
其中这个域名可以通过ats的dns解析到我的这台机器192.168.20.5
我的操作:
我发送请求:wget -e http_proxy=ats代理服务器的ip和端口 "” -S 或者浏览器中访问
则会出现好多个302跳转(多跳转了20次),最后一次的请求变成了 (21个test)
原因:
因为302跳转后的location也是本机,根据端口又跑到了nginx.conf中的 rewrite ^/(.*) redirect; 再次跳转,循环跳转了,但不知道为什么只循环了21次就停止了(多循环了20次),自以为得无限循环跳转下去
解决办法有二:
1. 可以配置rewrite到其他的源服务器,不要rewrite到本身nginx服务器
2. 修改rewrite的正则表达式为: rewrite ^/((?!test).)*$ redirect; 可达到只302一次,不多次循环
阅读(10160) | 评论(0) | 转发(0) |