在nginx上使用lua筛选代理\u pass上的请求

在nginx上使用lua筛选代理\u pass上的请求,nginx,lua,Nginx,Lua,我想先过滤流媒体url,然后再使用带有lua的nginx的proxy_pass访问流媒体服务器 我的流媒体服务器是 我想知道什么时候可以访问它。如果您访问它,将显示“拒绝权限”页面 这是我在nginx配置文件中的代码: location ^~ /stream { set $flag_false "false"; set $flag "false"; set $flag_true 1; rewrit

我想先过滤流媒体url,然后再使用带有lua的nginx的proxy_pass访问流媒体服务器

我的流媒体服务器是

我想知道什么时候可以访问它。如果您访问它,将显示“拒绝权限”页面

这是我在nginx配置文件中的代码:

  location ^~ /stream {
            set $flag_false "false";
            set $flag "false";
            set $flag_true 1;
            rewrite_by_lua '
                    local token = ngx.var.arg_token
                    if token == "mytoken" then
                            ngx.var.flag = ngx.var.flag_true
                    end

            ';
            # rewrite_by_lua "ngx.var.flag = ngx.var.flag_true";
            if ($flag = $flag_true) {
                    proxy_pass http://x.x.x.x:8092;
                    break;
            }
            echo "You do not have permission: $flag";
   }
但是,当我用url请求时,它并没有传递到我的流媒体,而是显示“您没有权限:1”。显然,它将标志值更改为1,但不会传递到我的流。 我怎么了?。请帮帮我

  • 指令始终按照标准(
    if
    set
    指令)运行。您可以改为使用指令
  • if(condition){}
    语句的“=”和“!=”运算符将变量与字符串进行比较,这意味着if条件的
    $flag\u true
    将不会计算为
    1
  • 修改后的配置如下:

        location ^~ /stream {
            set $flag_true 1;
            set_by_lua $flag '
                local token = ngx.var.arg_token
                if token == "mytoken" then
                    return ngx.var.flag_true
                end
                return "false"
            ';
            if ($flag = 1) {
                proxy_pass http://x.x.x.x:8092;
                break;
            }
            echo "You do not have permission: $flag";
        }
    

    我有什么问题?。是吗?。因为if(condition){}语句在check-token语句之前执行?@SơnL–m,是的,
    if(condition){}
    语句在check-token语句之前执行(
    rewrite_by_-lua
    )。