Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I am trying to set up a caching reverse proxy with 2 conditions; if either is met, it shouldn't be storing the file from origin:

  • partial-content request
  • request with query string

As configured below, I got nginx to NOT store partial-content requests.
However, it is still storing requests with query string. What am I missing here?

curl -r 1000-2000 http://edge.com/data/abcdef.dat [OK. No file stored.]
wget http://edge.com/data/abcdef.dat?query=string [Not OK. abcdef.dat stored on edge.]

location /data/ {
    set $originuri /origin$uri$is_args$args;
    errorpage 404 = $originuri;
}

location /origin/ {
    proxy_pass http://origin.com:1111;
    proxy_store /mnt1/edge/store;
    proxy_temp_path /mnt1/edge/tmp;
    proxy_set_header If-Range $http_if_range;
    proxy_set_header Range $http_range;
    proxy_no_cache $http_range $http_if_range $is_args;
}
share|improve this question

1 Answer 1

If I'm reading your configuration right, when you pass the request to the origin location for proxying, you're building a URI string which doesn't include a GET query string (i.e. you're flattening the $args). If that's what's happening, it would explain why the origin location isn't seeing $is_args as true.

This is a hunch on my part - I'd want to look at the request logs to see if it's correct.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.