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; }
Best Answer
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.