使用lua-resty-redis连接nginx的upstream

我需要在测试过程中通过自定义标题在预配置的redis服务器上动态切换IP: 6379。当前配置示例:

upstream backend_cluster {

    server aaa.bbb.ccc.ddd:6379 fail_timeout=0 max_fails=0;

    server aaa.bbb.ccc.ddd:6380 fail_timeout=0 max_fails=0;

    server aaa.bbb.ccc.ddd:6381 fail_timeout=0 max_fails=0;

    server aaa.bbb.ccc.ddd:6382 fail_timeout=0 max_fails=0;

keepalive 16;

}

map $http_BackendIP $backend_upstream {

    default                                 "backend_cluster";
    "~ ^([0-9] {1,3} [\。]){3} [0-9] {1,3} +"      "$BackendIP";

}

server {

    listen  80 default_server;
    server_name _;
    set $BackendIP "${http_BackendIP}:6379";

    location = /test {

        ........
        content_by_lua_block {
                    local redis = require "resty.redis"
                    local red = redis:new()
                    red:set_timeout(1000)
                    local ok, err = red:connect(ngx.var.backend_upstream)
                    if not ok then
                        ngx.log(ngx.ERR, "无法连接:", err)
                        return
                    end
                    ok, err = red:rpush(ngx.var.redis_key,ngx.var.query)
                    if not ok then
                        ngx.log(ngx.ERR, "rpush error: ", err)
                        return
                    end
        }

    }

}

此配置成功将数据推送到123.456.789.0:6379的redis中,如果我将自定义标题设置为

“BackendIP:123.456.789.0”

但没有BackendIP标题,它无法理解nginx upstream并出现错误:

\*\* 无法连接:无法解析backend_cluster(3:未找到主机) **

我是否可以以预期方式使该程序成功工作?提前感谢,同志们。

点赞