I just tested with a single 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 {
HIT $host;
EXPIRED $host;
- $host;
default "";
}
And I use it in one of my server chunk with limit_req directive below:
limit_req zone=cache_host busrt=1;
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 $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
request that MISS cache?
Thanks!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20160718/0a518bd1/attachment.html>