问题描述
- nginx 如何读取本地文件获取参数
- 最近遇到开发一个需求:
前提我们使用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好像无法直接获取二级目录,让开发将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 __keyvalue = 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; }
解决方案二:
自己顶下,期待大神的帮助!
解决方案三:
读取参数文件
Java 读取 Properties 文件 获取参数值
nginx如何读取缓存文件
解决方案四:
用rewrite来转发请求到b 等测试好了在修改回来
时间: 2024-09-13 17:06:22