在Nginx中需要什么配置才能实现以下行为:
每当收到请求时,应将其转发给应用程序a;如果应用程序A返回{"allowed":true}作为响应,同样的请求应该转发给应用程序B,应用程序B的响应应该返回给客户端。但是,如果应用程序A返回{"allowed": 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';
}
}
我根本无法测试这个,因为我没有得到与您的类似的环境,但是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
}
}
}
}
在这里查看更多关于模块的信息