negation in the map directive of nginx

Francis Daly francis at
Thu Sep 8 22:52:13 UTC 2022

On Thu, Sep 08, 2022 at 01:25:20PM -0400, libresco_27 wrote:

Hi there,

> I'm working on rate limiting for specific group of client ids where if the
> client id is equal to XYZ don't map it, thus, the zone doesn't get
> incremented. Requests with an empty key value are
not accounted.

It's probably easier to set the value to empty for those ones, and
not-empty for the rest.

> For ex - 
> limit_req_zone $default_rate_client_id zone=globalClientRateLimit_zone:50k
> rate=10r/m sync;
> map $client_id $default_rate_client_id {
>     "^(?!ZZZZZZ)$" "$1" 
> } 

    map $client_id $default_rate_client_id {
        ZZZZZ "";
        default $client_id;

(or whatever value is wanted).

> But this doesn't seem to work. Is this the correct way to negate a
> particular string(ZZZZZ in this example)? Please let me know.

Negative regexes can be hard; it's simpler to avoid them entirely.


Francis Daly        francis at

More information about the nginx mailing list