openresty无法实现转发

求助, 手动搭建隧道代理ip, ip存储再redis, 使用openresty读取redis中的ip并实现自动转发, 但是再请求隧道代理ip时, 程序报错
nginx.conf代码如下:

worker_processes  16;
error_log /usr/local/openresty/nginx/logs/error.log;
events {
    worker_connections 1024;
}
stream {
    log_format tcp_proxy '$remote_addr [$time_local] '
                         '$protocol $status $bytes_sent $bytes_received '
                         '$session_time "$upstream_addr" '
                         '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
    access_log /tmp/access.log tcp_proxy;
    open_log_file_cache off;
    upstream backend{
        server 127.0.0.2:1101;
        balancer_by_lua_block {
            local balancer = require "ngx.balancer"
            local host = ""
            local port = 0
            host = ngx.ctx.proxy_host
            port = ngx.ctx.proxy_port
            local ok, err = balancer.set_current_peer(host, port)
            if not ok then
                ngx.log(ngx.ERR, "failed to set the peer: ", err)
            end
        }
    }
    server {
        preread_by_lua_block{
 
            local redis = require("resty.redis")
            local redis_instance = redis:new()
            redis_instance:set_timeout(3000)
            local rhost = "127.0.0.1"
            local rport = 6739
            local rpass = "abcdefg"
            local rkey = "proxy:pool"
            local ok, err = redis_instance:connect(rhost, rport)
            ngx.log(ngx.ERR, "1111111 ", ok, " ", err)
            local res, err = redis_instance:hkeys(rkey)
            if not res then
                ngx.log(ngx.ERR,"res num error : ", err)
                return redis_instance:close()
            end
            math.randomseed(tostring(ngx.now()):reverse():sub(1, 6))
            local proxy = res[math.random(#res)]
            local colon_index = string.find(proxy, ":")
            local proxy_ip = string.sub(proxy, 1, colon_index - 1)
            local proxy_port = string.sub(proxy, colon_index + 1)
            ngx.log(ngx.ERR,"redis data = ", proxy_ip, ":", proxy_port);
            ngx.ctx.proxy_host = proxy_ip
            ngx.ctx.proxy_port = proxy_port
            redis_instance:close()
        }
       listen 0.0.0.0:9976;
       proxy_connect_timeout 3s;
       proxy_timeout 10s;
       proxy_pass backend;
    }
}

报错信息如下:

2022/12/07 15:06:50 [error] 21477#0: *23 failed to run balancer_by_lua*: /opt/openresty/lualib/ngx/balancer.lua:118: attempt to get length of local 'addr' (a nil value)
stack traceback:
        /opt/openresty/lualib/ngx/balancer.lua:118: in function 'set_current_peer'
        balancer_by_lua:7: in main chunk while connecting to upstream, client: 192.168.147.1, server: 0.0.0.0:9976, bytes from/to client:0/0, bytes from/to upstream:0/0