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

2018-04-26  本文已影响0人  holyABCD

问题描述

原配置

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;
}

排查步骤

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

上一篇下一篇

猜你喜欢

热点阅读