set directive not working when mirror is used

Maxim Dounin mdounin at mdounin.ru
Fri Sep 20 12:54:34 UTC 2019


Hello!

On Fri, Sep 20, 2019 at 07:59:15AM +0000, PALMA Mickael wrote:

> Hi,
> 
> Here is my location directive :
> 
> server {
>   # Start with an undefined API name, each API will update this value
>   set $api_name -;
> 
>   [...]
> 
>   location = /_oauth {
>     internal;
>     set $api_name 'Oauth API';
> 
>     # Policy configuration here (authentication, rate limiting, logging, more...)
>     mirror /_mirrored_api;
>     proxy_pass http://$upstream$request_uri;
>   }
> }
> 
> In my log I only get “-“ as api_name but if I comment the mirror directive I get 'Oauth API’.
> 
> Any idea how to avoid that.
> I always want the name to be ''Oauth API’'.

The problem is that variables space is shared among all 
subrequests, including mirror one.  As such, "set $api_name -;" in 
the mirror subrequest overrides the one previously set for the 
request.  The only solution is to avoid changing variables you 
don't want to be changed.  In this particular configuration - 
consider removing "set ..." from the server level.

-- 
Maxim Dounin
http://mdounin.ru/


More information about the nginx mailing list