Rate Limiter
Enabled Limit the amount of incoming requests to protect againts brute forcing.
Stores ip addresses of a requests in lru-cache and will throw an 429 Too Many Requests
error when there will be too many requests. Based on https://unstorage.unjs.io/
Usage
This middleware is enabled globally by default. You can customize it both globally and per route like following:
export default defineNuxtConfig({ // Global security: { rateLimiter: { // options } } // Per Route routeRules: { '/my-secret-route': { security: { rateLimiter: { // options } } } }})
You can also disable the middleware globally or per route by setting rateLimiter: false
.
Options
Rate limiter accepts following configuration options:
type RateLimiter = { tokensPerInterval: number; interval: number; headers: boolean; throwError: boolean; driver: { name: string; options: Record<string, any>; };};
tokensPerInterval
- Default:
150
The amount of requests that reach the application before rate limiting will block further connection. Based on Twitter search rate limiting.
interval
- Default:
300000
The time after which the rate limiting will be reset.
headers
- Default:
false
When set to true
it will set the response headers: X-Ratelimit-Remaining
, X-Ratelimit-Reset
, X-Ratelimit-Limit
with appriopriate values.
throwError
- Default:
true
Whether to throw Nuxt Error with appriopriate error code and message. If set to false, it will just return the object with the error that you can handle.
driver
- Default:
{ name: 'lruCache' }
Storage used to store the rate limited IP addresses. By default uses LRU Cache but you can change it to any of the drivers supported by unstorage