1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

前端简单的灰度方案,使用nginx

项目背景

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

前端简单的灰度方案,使用nginx

优缺点

这种实现方式具有实现简单,易于理解等优点。同时,可以通过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