2

I have a lua script that uses lua-resty to call another service via co-sockets. Now I would like to use the information from this call to route the request in nginx.

nginx includes the lua script in access_by_lua* which sets the var like this:

ngx.var.blocked = '1'

and routes in the location like this:

if ( $blocked ) {
     proxy_pass   http://haproxy-9001;
     break;
}

the problem is now that nginx does not pick up the variable change (in this phase). if I include the lua script in set_by_lua* phase then the variable passing works but I dont have access to the co-sockets in this phase.

Any idea how to get the variable out of lua land into the nginx variable in the access_by_lua, rewrite_by_lua or content_by_lua phase so that I can use the co-socket api to make a http call?

daniel
  • 47
  • 1
  • 6

2 Answers2

2

if nginx directive is implemented by https://nginx.ru/en/docs/http/ngx_http_rewrite_module.html.

Obviously it works on rewrite phase, so your changes at access phase doesn't work. Just don't use if. Below is snippet from one of my nginx config:

proxy_pass $scheme://$upstream$uri$is_args$args;

Just set $upstream variable at access phase and it will work at content phase (proxy_pass).

Alexander Altshuler
  • 2,930
  • 1
  • 17
  • 27
0

Maybe you could capture location with that proxy instead of variable, it works in access_by_lua scope https://github.com/openresty/lua-nginx-module#ngxlocationcapture