nginx如何通过客户端ip分流
www.gaoxuan1989.com/page1.html,并且将剩余的流量分到http://www.gaoxuan.com1989/otherpage.html,接下来我们就来讨论这个问题。
通过Nginx HttpAccessModule分发流量
由于Nginx支持条件判断,所以首先我们先看一个例子:如何使用HttpAccessModule的变量$remote_addr
来分发流量。
server {
if ($remote_addr = 1.2.3.4) {
rewrite ^ http://www.gaoxuan1989.com/otherpage.html;
}
}
这个例子就可以将1.2.3.4的这个ip地址转发到我们预先设定的地址了。
假如我们使用nginx作为Apache或者其他web容器的前端代理呢?
这种场景我们基本不用怎么改,只是将流量通过proxy_pass
转发到后端服务就好了:
if ($remote_addr = 1.2.3.4) {
proxy_pass http://www.gaoxuan1989.com/otherpage.html;
}
举两个现实中会用到这种情况的例子:
- 我们需要将办公环境的请求分流到灰度环境,而将所有的正常流量分到正式环境;
- 只允许管理员的ip地址访问到管理后台界面,其他的请求没有权限。(当然从安全角度来看,你还是要有用户名密码作为校验)。
通过nginx的Geo Module分流
还有一个办法,就是通过nginx的geo模块,它会根据用户请求的ip地址创建一个变量。
使用举例:
geo $bad_user {
default 0;
1.2.3.4/32 1;
}
server {
if ($bad_user) {
rewrite ^ http://www.gaoxuan1989.com/otherpage.html;
}
}
上面的例子中,如果客户端请求ip不符合我们指定的ip段,那就将这个变量的值就是默认值0,否则就是1,这样就将制定ip段的请求都转发到我们期望的地址了。
refer:http://scalescale.staging.wpengine.com/tips/nginx/redirect-nginx-traffic-client-ip/