openresty nginx在发布请求正文数据中搜索关键字

ewm0tg9j  于 2022-11-21  发布在  Nginx
关注(0)|答案(1)|浏览(143)

我一直在使用openresty nginx为简单的请求转发的目的,它是工作的预期,我转发每个传入的请求到另一个URL使用下面的代码:

location /app/ {
        proxy_pass      https://example.com/abc/;
        proxy_read_timeout 60s;         
        proxy_pass_header Server;
        proxy_set_header          Host            $host;
        proxy_set_header          X-Real-IP       $remote_addr;
        proxy_set_header          X-Forwarded-For $proxy_add_x_forwarded_for;
        add_header  X-Frame-Options "SAMEORIGIN" always;

并且我用下面的代码记录每个POST请求:

server {
                  log_format post_logs '[$time_local] "$request" $status '  

                  '$body_bytes_sent "$http_referer" '        

                  '"$http_user_agent" [$request_body]';
      }


location /app/ {
                  access_log  logs/post.log post_logs;
               }

现在,我的要求是,在转发每个请求之前,我想过滤后请求体数据的特定字符串/关键字,它应该只转发到代理URL https://example.com/abc/,如果在后数据中找到特定字符串/关键字。
我做了一些研究,但没有找到任何东西,帮助我实现这一点,有人能帮忙吗?

kg7wmglp

kg7wmglp1#

不太了解Lua,但希望这能有所帮助:

location /app {
        set $flag_true 1;
        set_by_lua $flag '
            local token = ngx.var.arg_token
            local request_body = ngx.req.get_body_data()
            ngx.req.read_body()

            # do your filtering here 
            if string.find(request_body, "tiger") 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";
    }

灵感来源:
Filter request on proxy_pass using lua on nginx
How to check if matching text is found in a string in Lua?

相关问题