Nginx multiple upstream map conditions

Valentin V. Bartenev vbart at nginx.com
Wed Aug 31 11:04:09 UTC 2016


On Tuesday 30 August 2016 14:25:28 c0nw0nk wrote:
> So this is a fun one.
> 
> As allot of people probably already know you can't use "IF" on upstream
> values since if conditions are executed before any "$upstream_" conditions.
> 
> But with a map directive it might just be possible to combine 2 upstream
> maps together and have a output based on the conditions matched.
> 
> Here is what I am trying to achieve.
> 
> If the upstream returns with a logged_in value of 1 then we forward and pass
> the Set-Cookie header to the client "add_header".
> Else the "add_header Set-Cookie" should be empty.
> 
> ##logged in value 0 = guest
> ##logged in value 1 = has an account
> map $upstream_cookie_logged_in $upstream_logged_in_value {
> default $upstream_cookie_logged_in;
> }
> 
> map $upstream_http_set_cookie $upstream_md5_value {
> default $upstream_http_set_cookie;
> }
> 
> 
> add_header Set-Cookie $upstream_md5_value; ##Only want to send the MD5
> cookie when the logged in value is 1
> 
> 
> fastcgi_hide_header Set-Cookie; ##Removed the set-cookie and to be added in
> only when conditions are met. "add_header"
> 
> 
> Thanks in advance to anyone who can help me out :D
> 
[..]

map $upstream_cookie_logged_in $upstream_md5_value {
    1  $upstream_http_set_cookie;
}

add_header Set-Cookie $upstream_md5_value;

  wbr, Valentin V. Bartenev



More information about the nginx mailing list