@@ -39,27 +39,43 @@ app.use((req, res, next) => {
39
39
const expireInSeconds = process . env . EXPIRE_IN_SECONDS || 15 ;
40
40
const requestLimit = process . env . REQUEST_LIMIT || 99 ;
41
41
const delayTimeInSeconds = process . env . DELAY_IN_SECONDS || 0.5 ;
42
+ const limitByIP = process . env . LIMIT_BY_IP || 1 ;
43
+
44
+ const redisKeyGenerator = function keyGenerator ( req ) {
45
+ if ( parseInt ( limitByIP , 10 ) === 1 ) {
46
+ return req . ip ;
47
+ }
48
+
49
+ return 'ALL_IPS' ;
50
+ } ;
51
+
42
52
const speedLimiter = slowDown ( {
53
+ keyGenerator : redisKeyGenerator ,
43
54
store : new RedisStore ( {
44
55
client,
45
- prefix : 'sd: ' , // setting prefix to avoid collision between delaying and rate limiting requests
56
+ // setting prefix to avoid collision between delaying and rate limiting requests
57
+ prefix : 'sd: ' ,
46
58
expiry : expireInSeconds ,
47
59
} ) ,
48
- windowMs : 1000 * expireInSeconds , // 1 minutes
49
- delayAfter : requestLimit , // allow specified requests per window time
60
+ windowMs : 1000 * expireInSeconds ,
61
+ // allow specified requests per window time
62
+ delayAfter : requestLimit ,
50
63
// begin adding specified delay time per request above maximum limit:
51
64
delayMs : 1000 * delayTimeInSeconds ,
52
65
} ) ;
53
66
54
67
const rateLimiter = new RateLimit ( {
68
+ keyGenerator : redisKeyGenerator ,
55
69
store : new RedisStore ( {
56
70
client,
57
- prefix : 'rl: ' , // setting prefix to avoid collision between delaying and rate limiting requests
71
+ // setting prefix to avoid collision between delaying and rate limiting requests
72
+ prefix : 'rl: ' ,
58
73
expiry : expireInSeconds ,
59
74
} ) ,
60
-
61
- windowMs : 1000 * expireInSeconds , // setting window size in ms(eg: 2000)
62
- max : requestLimit , // limit each IP to specified requests per windowMs (e.g: 1)
75
+ // setting window size in ms(eg: 2000)
76
+ windowMs : 1000 * expireInSeconds ,
77
+ // limit each IP to specified requests per windowMs (e.g: 1)
78
+ max : requestLimit ,
63
79
} ) ;
64
80
65
81
app . use ( speedLimiter ) ;
0 commit comments