我如何才能在nginx中实现此行为

vptzau2j  于 2023-04-05  发布在  Nginx
关注(0)|答案(1)|浏览(115)

Nginx中需要什么配置才能实现以下行为:
无论何时收到请求,都应将其转发给应用程序A;如果应用程序A返回{“allowed”:true}作为响应,则应将相同的请求转发给应用程序B,并且应将来自应用程序B的响应返回给客户端。但是,如果应用程序A返回{“allowed”:true}作为响应,则应将相同的请求转发给应用程序B,并且应将来自应用程序B的响应返回给客户端。false}作为响应,服务器应返回状态码为401的响应。
大概是这样的

server {
   listen  80;

location / {
    # forword request to App-A;
    proxy_pass https://app-A.dev/;
    # Read the response
    if response['allowed'] == true;
        # forword it to application B
        proxy_pass https://app-B.dev/;
    else:
        return '401';
    }   
}
wwtsj6pe

wwtsj6pe1#

我根本无法测试这个,因为我没有一个类似的环境,但lua脚本应该是这样的:

http {
    lua_shared_dict allow_dict 1m;

    server {
        listen 80;

        location / {
            proxy_pass https://app-A.dev/;
            header_filter_by_lua_block {
                local allow = ngx.resp.get_headers()['allow']
                if allow == 'true' then
                    ngx.ctx.allow = true
                end
            }
            body_filter_by_lua_block {
                if ngx.ctx.allow then
                    ngx.var.proxy_pass = https://app-B.dev/
                end
            }
        }
    }
}

请参阅有关模块here的更多信息

相关问题