Nginx $upstream_cache_status not available when used in rate limiting
Linna.Ding
linnading1989 at gmail.com
Mon Jul 18 19:27:19 UTC 2016
Hi,
I use Nginx as reverse proxy, and I would like to rate limit the requests
to origin server, but only limit the requests with cache status EXPIRED. I
just tested with a map "cache_key", and the rate limiting doesn't work, the
$cache_key was logged as empty string. But changing $upstream_cache_status
to non-upstream variables like $remote_addr and adding an IP match value
will make the rate limiting work. The zone I defined like so:
limit_req_zone $cache_key zone=cache_host:1m rate=1r/m;
map $upstream_cache_status $cache_key {
EXPIRED $host;
default "";
}
I enabled cache setting in nginx.conf, and one of my server chunk uses the
rate limit zone like below:
limit_req zone=cache_host busrt=1;
Is this because $upstream_cache_status value is set after the request is
sent to origin server and got the response, while $cache_key is used in
rate limit zone which checked before the request was sent to origin server? If
so, is there a recommended way to implement rate limiting only for requests
with specific cache status?
Thanks!
Linna
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20160718/56ab9da2/attachment.html>
More information about the nginx
mailing list