注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

利用Nginx判断ip或cookie的值进行灰度发布  

2016-09-03 16:25:41|  分类: 服务器 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
手头项目有需求,要根据相应的IP或cookie的值来进行判断,跳转到不同的网站。这种需求,一般是可能有中英文网站要自动判断跳转,又或者是要进行灰度发布,简单来说,就是根据各种条件,让一部分用户使用旧版本,另一部分用户使用新版本。当然这个需求,可以用后端程序来实现,但Nginx 的语法本身可以看作是一门小型的编程语言,通过简单的编程,是可以轻松实现的[这里请注意,如下办法都是基于rewrite 模块的,Nginx编译的时候一定要包括这个模块]。
1)根据IP来判断[这种情况下是要特定用户的IP是固定的,这里假设192.168.2.1的用新版本,其它IP用旧版本,新旧版本在不同服务器上],相关配置如下:

upstream prod {
#旧版本
server 192.168.1.10;
}
upstream pre-prod {
#新版本
server 192.168.1.100;
}
server {
listen 80;
#这里先统一设置成旧版本
set $web_backend prod;
#根据IP来判断进入那个版本~ 区分大小写匹配
if ($remote_addr ~ "192.168.2.1") {
set $web_backend pre-prod;
}
location / {
proxy_pass http://$web_backend;
include proxy.conf;
}
}

又或者是网站都在同一台服务器上,只是在不同目录,那么采用如下手段:

server {
listen 80;
#这里先统一设置成旧版本
set $rootdir "/var/www/237h.com";
#根据IP来判断进入那个版本
if ($remote_addr ~ "192.168.2.1") {
set $rootdir "/var/www/593668.com";
}
location / {
root $rootdir;
}
}

2)基于cookie值来判断,这里假定cookie中存储相关字段为LANG[需要后端程序做配合]。

upstream prod {
#旧版本
server 192.168.1.10;
}
upstream pre-prod {
#新版本
server 192.168.1.100;
}
server {
listen 80;
#这里先统一设置成旧版本
set $web_backend prod;
#根据cookie值lang是否包含cn或CN来判断进入中文版~* 不区分大小写匹配
if ($cookie_lang ~* ^.*cn.*$) {
set $web_backend pre-prod;
}
location / {
proxy_pass http://$web_backend;
include proxy.conf;
}
}

而如果在同一台服务器,相关的参数可以参照如上调整下。
总结下,这里其实都是用Nginx的变量来对相应的参数做判断,当然这里都只是简单的例子,比如想要区分更多,如某个IP段,那么相应的判断条件修改下即可[这里以192.168为打头做例]。

if ($remote_addr ~ ^192.168.*$") {
set $web_backend pre-prod;
}

好了,这个条件判断可以按照需求自行设置,这样的话,无论是基于IP,还是基于cookie,又或者结合这两者,都并不是一件困难的事。又或者可以更深入一点,比如没有注册登录的用户使用一个服务器[外网],注册用户使用一个服务器[里网],将彼此的区域分开,互不相通,也能给网站带来更高的安全性。
  评论这张
 
阅读(0)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017