最近遇到开发一个需求:
前提我们使用nginx做方向代理,后端tomcat;
请求的uri类似 http://www.test.com/********/abc/abc/*;
其中 二级目录/********/ 是根据用户随机生成的11位id 与用户是一一对应的;
问题:现有后端tomcatA 更改bug后或者优化了部分功能,我们没有重新部署tomcatA,而是重新搭建了一个新的后台tomcatB,因为nginx代理的tomcatA 这样就没办法测试tomcatB环境;因为我们知道/********/ 与用户是一一对应的关系,所以我就想能不能将测试用户的/********/id报错存放在一个文件中,如test.txt,然后我配置nginx 根据读取test.txt 获得参数来匹配二级目录选择后端服务器tomcatB;这样的想法能不能实现?nginx能不能读取test.txt呢?我改怎么配置nginx呢?希望大神给与帮助!
nginx 如何读取本地文件获取参数
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- yuelu86 2015-12-07 08:29关注
发现nginx好像无法直接获取二级目录,让开发将id加到uri参数中,通过id选择后端服务器;
使用ngx_lua与lua_devel_kit插件解决问题
文本内容
111111111 127.0.0.1:8081
222222222 127.0.0.1:8082
333333333 127.0.0.1:8083
思路:1,首先通过函数io.open()打开文件;2,lines()分行读取;3,根据读取每行内同通过string.find()函数通过中间的空格捕获内容;4,根据id判断然后return value值给nginx环境变量$hsver;
5,判断返回的$hsver值是否为空,如果为空,重新给$hsver 默认值;
配置内容:
location /test {set_by_lua $hsver ' local f = io.open("/root/test.txt") for l in f:lines() do _,_,key,value = string.find(l,"(%d+)%s*(%A+)") if key == ngx.var.arg_id then return value end end '; if ($hsver = "") { set $hsver 127.0.0.1:8080; } proxy_pass $hsver; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报