利用nginx实现生产和灰度环境流量切换

1、根据cookie实现灰度配置

查询cookie键为version的值,如果该cookie值为V1则转发到server_01,为V2则转发到server_02,cookie值都不匹配的情况下默认走server_01所对应的服务器。

(1)、使用if指令实现

upstream server_01 {
    server 192.168.1.100:8080 max_fails=1 fail_timeout=60;
}
upstream server_02 {
    server 192.168.1.101:8080 max_fails=1 fail_timeout=60;
}
server {
    listen 80;
    server_name www.server.com;    #match cookie
    set $server "server_01";
    if ($http_cookie ~* "version=V1"){
        set $server server_01;
    }
    if ($http_cookie ~* "version=V2"){
        set $server server_02;
    }
    location / {
        proxy_pass http://$server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        index index.html index.htm;
    }
}

(2)、使用map指令实现

upstream server_01 {
    server 192.168.1.100:8080 max_fails=1 fail_timeout=60;
}
upstream server_02 {
    server 192.168.1.101:8080 max_fails=1 fail_timeout=60;
}
map $COOKIE_version $server {
    ~*V1$ server_01;
    ~*V2$ server_02;
    default server_01;
}
server {
    listen 80;
    server_name www.server.com;    location / {
        proxy_pass http://$server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        index index.html index.htm;
    }
}

2、根据权重实现灰度配置

upstream server {
    server 192.168.1.100:8080 max_fails=1 fail_timeout=60 weight=5;
    server 192.168.1.101:8080 max_fails=1 fail_timeout=60 weight=1;
}
server {
    listen 80;
    server_name www.server.com;    location / {
        proxy_pass http://server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        index index.html index.htm;
    }
}

3、根据来路IP实现灰度配置

(1)、资源在不同服务器上

upstream server_01 {
    server 192.168.1.100:8080 max_fails=1 fail_timeout=60;
}
upstream server_02 {
    server 192.168.1.101:8080 max_fails=1 fail_timeout=60;
}
server {
    listen 80;
    server_name www.server.com;    set $server "server_01";
    if ($remote_addr ~ "211.118.119.11"){
        set $server server_02;
    }
    location / {
        proxy_pass http://$server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        index index.html index.htm;
    }
}

(2)、资源在同一服务器上

server {
    listen 80;
    server_name www.server.com;    set $rootdir "/var/www/html";
    if ($remote_addr ~ "211.118.119.11"){
        set $rootdir "/var/www/test";
    }
    location / {
        root $rootdir;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        index index.html index.htm;
    }
}

4、Nginx+Lua实现灰度配置

ClienIP=ngx.req.get_headers()["X-Real-IP"] if ClientIP == nil then ClientIP = ngx.req.get_headers()["x_forworded_for"] end if ClientIP == nil then ClientIP = ngx.var.remote_addr end for line in io.lines("/usr/local/nginx/conf/lua/ipList.conf") do if not ip_config:get(line) then ip_config:set(line, "0") end end if ip_config:get(ClientIP) == "0" then ngx.exec("@test_env") else ngx.exec("@product_env") endipList.conf内容格式 XXX.XXX.XXX.XXX YYY.YYY.YYY.YYYlua_code_cache on; lua_shared_dict config 1m;upstream MyServer { server 192.168.1.199:8099 max_fails=3 fail_timeout=30s; server 192.168.1.200:8099 max_fails=3 fail_timeout=30s; ip_hash; } server { listen 80; server_name jokerzhang.cn; access_log off; #access_log logs/jokerzhang.log; location / { access_by_lua_file /usr/local/nginx/conf/lua/ip_gray.lua; } location @test_env { proxy_pass http://192.168.1.199:8099; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location @product_env { proxy_pass http://MyServer; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

出处:http://dwz.date/bXyv

20个免费 K8S 名额:http://dwz.date/bUTc

声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!

(0)
上一篇 2020年8月8日
下一篇 2020年8月8日

相关推荐