项目背景
本次前端开发项目需要开发一个模块,在上线前需要进行临时灰度,现有项目状况为一个前端项目1.0.0版本,后端服务1.0.0版本,后端灰度服务2.0.0版本,域名解析到前端服务80、443端口,前端通过nginx转发静态文件。实现灰度方案的原理为,打包一份前端项目2.0.0版本,上传服务器并部署在不同端口,通过nginx获取文件中携带的请求头remote_user,在nginx代理静态文件的时候判断当前用户是否灰度中,请求不同的静态资源。同时,在前端打包时要给请求的接口增加版本号2.0.0,并通过版本号判断访问的后端灰度服务。

优缺点
这种实现方式具有实现简单,易于理解等优点。同时,可以通过nginx灰度到具体人员。缺点则是需要维护两套程序,不适合长时间的灰度方案,灰度人数有限并且nginx参数不能过长(但可以分开配置避免此问题)。
具体实践
为了实现灰度方案,需要配置一套前端服务来部署在80端口,请求接口版本号为1.0.0;另外一套前端服务则要部署在8080端口,请求接口版本号为2.0.0。例如,要灰度test.lvsan.zhang人员名单,则可以通过nginx配置使得静态资源通过remote_user分开请求,后端服务通过version请求对应的服务。
以下为nginx配置示例:
server {
listen 80;
server_name www.demo.com;
location / {
if ($http_remote_user ~* (test\.lv|san.zhang)){
proxy_pass http://localhost:8081;
}
root /data/demo;
index index.html index.htm;
}
location ^~/api/ {
if ($http_version = "2.0.0"){
# 代理到新的服务
proxy_pass http://10.11.12.234:9001;
}
proxy_pass http://10.11.12.234:9002;
}
}
注意
在实践中,需要注意增加nginx配置项以保证header小写,可以通过nginxunderscores_in_headers on来实现。同时,需要增加自定义header以防止出现跨域校验不通过。例如,在后端服务中可通过增加自定义header c.Header(“Access-Control-Allow-Headers”,”Content-Type, remote_user, api_version”) 来解决这个问题。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7407.html
