yuelu86 2015-12-01 10:26 采纳率: 100%
浏览 5426
已采纳

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呢?希望大神给与帮助!

  • 写回答

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;                   
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 一道python难题2
  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备