Possible issue with LRU and shared memory zones?

Maxim Dounin mdounin at mdounin.ru
Sat Sep 21 22:37:40 UTC 2024


Hello!

On Sat, Sep 21, 2024 at 07:33:10PM +0200, Eirik Øverby via nginx wrote:

> TL;DR: Did almost what you suggested. Thank you!
> Bit more details below..

[...]

> > Another solution might be to improve configuration to ensure that
> > all limit_req nodes require equal or close amount of memory - this
> > is usually true with $binary_remote_addr being used for limit_req,
> > but certainly not for $request.  Trivial fix that comes in mind is
> > to use some hash, such as MD5, and limit the hash instead.  This
> > will ensure fixed size of limit_req allocation, and will
> > completely eliminate the problem.
> > 
> > With standard modules, this can be done with embedded Perl, such
> > as:
> > 
> >      perl_set $request_md5 'sub {
> >          use Digest::MD5 qw(md5);
> >          my $r = shift;
> >          return md5($r->variable("request"));
> >      }';
> > 
> > (Note though that Perl might not be the best solution for DoS
> > protection, as it implies noticeable overhead.)
> > 
> > With 3rd party modules, set_misc probably would be most
> > appropriate, such as with "set_md5 $request_md5 $request;".
> 
> Just before getting your email, I added this:
>   set_by_lua_block $request_md5 { return ngx.md5_bin(request) }
> since we're already using LUA.
> If you think set_md5 is faster, then I'll switch to that.

While set_md5 is probably slightly faster, I don't think there 
is a significant difference.  As long as you are already using the 
Lua module, there should be little to no difference.

-- 
Maxim Dounin
http://mdounin.ru/


More information about the nginx mailing list