您的位置:首页技术文章
文章详情页

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

【字号: 日期:2023-08-16 08:30:29浏览:34作者:猪猪

问题描述

需求细节:一个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' thenngx.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;} }

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

问题解答

回答1:

你需要把用户登录后的凭证都放到 cookie 里面,然后就方便做验算了。

详见 https://github.com/cloudflare/lua-resty-cookie 里面的例子。

跳转的方式用 proxy_pass 应该没问题,挺好的。

标签: web