0
点赞
收藏
分享

微信扫一扫

nginx 根据cookie的某个值进行请求分发/和设置cookie值配置灰度环境

实现需求:根据cookie里的device-id值的尾数来将请求转发到不同的设备上

尾数的范围:0-9,A-F

将尾数为0-7的请求转发到server1上,将位数为89ABCDEF的请求分发到server2上

map $cookie_device-id $backend {
        ~^[1234567]$ backend1;
        default backend2;
}

upstream backend1 {
    server server1 weight=1 max_fails=5 fail_timeout=30s;
}

upstream backend2 {
    server server2 weight=1 max_fails=5 fail_timeout=30s;
}

location / {
        proxy_pass http://$backend;
}

上述有问题可以使用下面;

upstream backend1 {
    server server1 weight=1 max_fails=5 fail_timeout=30s;
}
upstream backend2 {
    server server2 weight=1 max_fails=5 fail_timeout=30s;
}

location / {
        set $device_id 0;
        if ($http_cookie ~* "device-id=([^;]+)(?:; )?") {
             set $device_id $1;
        }
                if ($device_id ~ "(A|B|C|D|E|F)$" ) {
              proxy_pass http://backend1;
        }
        proxy_pass http://backend2;

手动设置随机数

   location / {

        if ($cookie_device-id = '') {
        # 如果随机值不存在时,设置随机值
          set_by_lua_block $device_id {
            -- 设置随机数种子
            math.randomseed(os.time())
            -- 生成0到9之间的随机整数
            local random_number = math.random(0, 9)
            return random_number
          # 设置随机值
          add_header Set-Cookie "device-id=$device_id; Max-Age=86400; Path=/; HttpOnly";
        }
        #如果随机值为指定的数字时,访问灰度环境(不需要灰度环境时,注释即可)
        if ($cookie_device-id = '14') {
            proxy_pass http://123_com_grayscale;
        }
        include /usr/local/nginx/conf/proxy_setother.conf;
        proxy_pass http://123_com;
    }


举报

相关推荐

0 条评论