Nginx $upstream_cache_status not available when used in rate limiting

Linna.Ding linnading1989 at
Mon Jul 18 19:27:19 UTC 2016


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?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the nginx mailing list