一个nginx需求,访问web服务时,若用户为测试用户则转发到web服务的测试版本

需求细节:
一个web服务,分为正式服务器和测试服务器,通过nginx代理,用户首先访问时会提交登录请求(post方式)到nginx上,通过nginx判断登录用户是否为测试用户,若为测试用户则转发测试服务器。

碰到的问题:
1.判断用户已经实现了,怎么实现后续请求都发到同一服务器?想通过保存一个变量来实现,但是nginx变量是不能跨请求存在的,能否通过文件读写来保存变量?。

2.跳转方式如何实现?
下面是我的部分代码
首先访问 127.0.0.1/smdb

        location /smdb {
        default_type 'text/plain';
        set $jump 0;
        access_log /var/log/nginx/smdb_access.log smdb;
        error_log /var/log/nginx/error.log;
        log_subrequest on;
        lua_need_request_body on;
                client_max_body_size 50k;
                client_body_buffer_size 50k;
        content_by_lua '
            ngx.req.read_body()
            local args, err = ngx.req.get_post_args()
            if not args then
            ngx.say("failed to get post args: ", err)
            return
            end
            for key, val in pairs(args) do
            if val == "test" then
                ngx.var.jump = "1"
            end
            end
            ngx.exec("/tosmdb")
        ';
    }

    location /tosmdb {
        default_type 'text/plain';
        echo $jump;#注释掉下面,这里显示为1即判断出了用户
        if ($jump = "1"){
            proxy_pass http://smdbtest;
        }
        if ($jump = "0"){
            proxy_pass http://smdb;
        }
    }

访问后出现结果

阅读 5.2k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题