使用lginx上的lua在proxy_pass上过滤请求

时间:2016-03-14 16:24:40

标签: nginx lua

我想在使用lgin的proxy_pass与lua

之前将流式网址过滤到流媒体服务器

我的流媒体服务器是http://localhost:8092

我希望在访问http://localhost:8080/streami1?token=mytoken时,它会转发到http://localhost:8092/stream1。如果您访问http://localhost:8080/streaming1?token=abc,则会显示权限拒绝页面。

这是我在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请求http://localhost:8080/streaming1?token=mytoken时,它没有传递到我的流媒体信息中显示“你没有权限:1”。显然,它将标志值更改为1,但它不会传递给我的流式传输。 我错了什么?请帮帮我?

1 个答案:

答案 0 :(得分:1)

  1. rewrite_by_lua指令始终在标准ngx_http_rewrite_moduleifset指令之后运行。您可以改用set_by_lua指令。
  2. if (condition) {}语句的“=”和“!=”运算符将变量与一个字符串进行比较,这意味着if-condition的$flag_true将不会被评估为1
  3. 修改后的配置如下:

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