The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Plack::Middleware::Throttle - A Plack Middleware for rate-limiting incoming HTTP requests.

SYNOPSIS

  my $handler = builder {
    enable "Throttle::Hourly",
        max     => 2,
        backend => Plack::Middleware::Throttle::Backend::Hash->new(),
        path    => qr{^/api};
    sub { [ '200', [ 'Content-Type' => 'text/html' ], ['hello world'] ] };
  };

DESCRIPTION

This is a Plack middleware that provides logic for rate-limiting incoming HTTP requests to Rack applications.

This middleware provides three ways to handle throttling on incoming requests :

Hourly

How many requests an host can do in one hour. The counter is reseted each hour.

Daily

How many requets an host can do in one hour. The counter is reseted each day.

Interval

Which interval of time an host must respect between two request.

OPTIONS

code

HTTP code returned in the response when the limit have been exceeded. By default 503.

message

HTTP message returned in the response when the limit have been exceeded. By defaylt "Over rate limit".

backend

A cache object to store sessions informations.

  backend => Redis->new(server => '127.0.0.1:6379');

or

  backend => Cache::Memcached->new(servers => ["10.0.0.15:11211", "10.0.0.15:11212"]);

The cache object must implement get, set and incr methods. By default, you can use Plack::Middleware::Throttle::Backend::Hash.

By default, if no backend is specified, Plack::Middleware::Throttle::Backend::Hash is used.

key_prefix

Key to prefix sessions entry in the cache.

path

URL pattern or a callback to match request to throttle. If no path is specified, the whole application will be throttled.

white_list

An arrayref of hosts to put in a white list.

black_list

An arrayref of hosts to put in a black list.

AUTHOR

franck cuny <franck@lumberjaph.net>

SEE ALSO

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.