美文网首页
lua脚本中获取nginx重定向后地址问题

lua脚本中获取nginx重定向后地址问题

作者: holyABCD | 来源:发表于2018-04-26 11:40 被阅读0次

    问题描述

    原配置

    server{
      listen 80;
      rewrite /test/(.*) /dev/$1 last;
      location ^~/dev{
             access_by_lua_file '/opt/lua/bin/ap.lua';
             proxy_pass  http://192.168.143.28:80;
    }
    
    • 期望实现内容:把请求过来的 /test 替换成 /dev ,并路由到下发拦截location,通过ap.lua脚本把替换后的url请求到一个代理服务,代理服务进行一些过滤后转发后下方 proxy_pass.
    • 实际结果:把请求过来的 /test 替换成 /dev ,并路由到下发拦截location,可是通过ap.lua 中的ngx.var.request_uri 取到的还是原来的/test

    排查步骤

    1.查看nginx文档:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

    图片.png
    last:rewrite后重新用更改后的url 匹配下location。与我们已命中 /dev 的现象想吻合。但是命中lua脚本后,ngx.var.request_uri 取到的还是原地址。
    2.查看资料: 图片.png
    得知应用 ngx.var.uri获取rewrite后的uri,但不懈怠uri中的参数。需自己拼接

    更改后脚本

      local rewriteUri = ngx.var.uri
    
            local httpUri = ngx.var.request_uri
            ngx.log(ngx.INFO, 'ngx.var.request_uri '..rawUri..'\nngx.var.uri:'..rewriteUri)
            local equal_pos,_ = string.find(rawUri,rewriteUri)
            -- rewrite过
            if equal_pos == nil or equal_pos ~= 1 then
                    ngx.log(ngx.INFO, 'already rewrite!')
                    httpUri=rewriteUri
                    -- 获取uri中携带的参数
                    local params_pos, _ = string.find(rawUri, '?')
                    if params_pos ~= nil and params_pos > 0 then
                            local params = string.sub(rawUri,params_pos)
                            httpUri = rewriteUri..params
                    end
            end
    
            ngx.log(ngx.INFO, 'httpUri '..httpUri)
    

    查看资料:
    https://www.cnblogs.com/mikeluwen/p/7116967.html
    http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

    相关文章

      网友评论

          本文标题:lua脚本中获取nginx重定向后地址问题

          本文链接:https://www.haomeiwen.com/subject/zlpylftx.html