<div dir="ltr">I just tested with a single map "cache_key", and the rate limiting doesn't work, the<span style="font-size:x-small"> $cache_key</span> 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.<div>The zone I defined like so:<br><div><div><font size="1">       limit_req_zone $cache_key zone=cache_host:1m rate=1r/m;</font></div><div><font size="1">       map $upstream_cache_status $cache_key {</font></div><div><font size="1">           HIT $host;</font></div><div><font size="1">           EXPIRED $host;</font></div><div><font size="1">           - $host;</font></div><div><font size="1">           default "";</font></div><div><font size="1">        }</font></div></div><div>And I use it in one of my server chunk with limit_req directive below:</div><div>   <font size="1"> limit_req zone=cache_host busrt=1;</font></div><div><br></div></div><div>Since I am using Nginx as reverse proxy, is this because $upstream_cache_status value is set after the request is sent to origin server and got the response, while <span style="font-size:x-small">$cache_key</span> is used in rate limit zone which checked before the request was sent to origin server?</div><div>If so, is there a recommended way to implement rate limiting only for request that MISS cache?</div><div><br></div><div>Thanks!  </div></div>