因为公司的dns支持电信网通分流,所以有一个项目利用到这个功能,用户访问同一个链接,电信ip的看到一个页面,网通ip的看到另一个。
原先的配置是用squid的hosts,网通的squid指到网通页面后台,电信的squid指到电信页面后台。
这种做法有明显缺点:
1、死活要有两台后端服务器,目前使用的squid2.5下是不支持配置不同端口的。
2、squid的hosts得有两份,这不利于管理,如果前端不断扩充,这又是一个麻烦事。
如果把这个域名网通电信的cache都指到了中层代理上,这些问题都很容易解决了。
配置的逻辑并不算复杂:
1、首先取到客户端ip,在中层代理上,客户端ip就是前面的cache服务器的内网ip,是很容易区分的。
2、使用一个判断语句,让他们各走各路就好。
配置:
location = / {
proxy_pass http://product.xxx.com;
include proxy.conf;
if ( $remote_addr ~ ^192.168.1 ) {
rewrite ^/$ /a/ last;
}
if ( $remote_addr ~ ^192.168.2 ) {
rewrite ^/$ /b/ last;
}
}
不过,如果没有前端cache,要做这样的区分,还是不可能实现的。