add_header is not working in certain locations

Francis Daly francis at daoine.org
Wed Aug 13 23:33:39 UTC 2014


On Wed, Aug 13, 2014 at 02:28:27AM -0400, bodomic wrote:

Hi there,

> Hi all, I've got strange behavior that I don't understand in two different
> configs. I'll post examples below, in both of them I use add_header two
> times and one of them is not working while second does.
> 
> Example 1:
> Request is: http://hostname/?region=XX 

In this case, for location matching the request is "/", so the best-match
location for that will be used.

> #This location adds header, so it's frankly the only reason I use it in my
> config. If I set location to "~ .*", I'll get header set also.
> location = / {
>   if ($arg_region) {
>      add_header Set-Cookie "__geoip_country__=$arg_region;Path=/";
>   }
>  proxy_pass http://backend; 
> }
> #If I remove the exact match above, I'll not get header set. Even if it's
> the only location in whole config and all site is working from there for
> sure.
>         location / {
>                 if ($arg_region) { add_header Set-Cookie
> "__geoip_country__=$arg_region; path=/" ;}
>                 proxy_pass http://backend;
>         }

It works for me.

In this case, I do get the Set-Cookie header when I have either one of
the two location{} blocks as the only location{} in the configuration. I
think you say that you do not get the Set-Cookie header in the second
case -- can you provide a complete, small, config that shows that?

> Example 2:
> Request is the same and this chain of locations is recommended by drupal
> community.

For these ones, I'm not sure how to set up a simple test.

Note, though, that you are using "if" inside "location". Generally, it is
not wise to do that unless you understand exactly what your configuration
actually means.

http://wiki.nginx.org/IfIsEvil for details.

Is there a link to this drupal recommendation? It isn't obvious to
me from the first few results for "nginx site:drupal.org" or "drupal
site:nginx.org"

>         location / {
> #Does not work
>                 if ($arg_region) { add_header Set-Cookie
> "__geoip_country__=$arg_region;Path=/"; }
>                 try_files $uri @rewrite;
>         }

That one seems to be "# try_files wont work due to if" on the IfIsEvil page.

Cheers,

	f
-- 
Francis Daly        francis at daoine.org



More information about the nginx mailing list