|  | @@ -23,68 +23,99 @@ An example configuration can be find below. This configuration limits the access
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  .. code:: json
 |  |  .. code:: json
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    [
 |  | 
 | 
											
												
													
														|  | -        {
 |  | 
 | 
											
												
													
														|  | -            "name": "search request",
 |  | 
 | 
											
												
													
														|  | -            "filters": ["Param:q", "Path=^(/|/search)$"],
 |  | 
 | 
											
												
													
														|  | -            "interval": <time-interval-in-sec>,
 |  | 
 | 
											
												
													
														|  | -            "limit": <max-request-number-in-interval>,
 |  | 
 | 
											
												
													
														|  | -            "subrules": [
 |  | 
 | 
											
												
													
														|  | -                {
 |  | 
 | 
											
												
													
														|  | -                    "name": "roboagent limit",
 |  | 
 | 
											
												
													
														|  | -                    "interval": <time-interval-in-sec>,
 |  | 
 | 
											
												
													
														|  | -                    "limit": <max-request-number-in-interval>,
 |  | 
 | 
											
												
													
														|  | -                    "filters": ["Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client)"],
 |  | 
 | 
											
												
													
														|  | -                    "actions": [
 |  | 
 | 
											
												
													
														|  | -                        {"name": "block",
 |  | 
 | 
											
												
													
														|  | -                         "params": {"message": "Rate limit exceeded"}}
 |  | 
 | 
											
												
													
														|  | -                    ]
 |  | 
 | 
											
												
													
														|  | -                },
 |  | 
 | 
											
												
													
														|  | -                {
 |  | 
 | 
											
												
													
														|  | -                    "name": "botlimit",
 |  | 
 | 
											
												
													
														|  | -                    "limit": 0,
 |  | 
 | 
											
												
													
														|  | -                    "stop": true,
 |  | 
 | 
											
												
													
														|  | -                    "filters": ["Header:User-Agent=(Googlebot|bingbot|Baiduspider|yacybot|YandexMobileBot|YandexBot|Yahoo! Slurp|MJ12bot|AhrefsBot|archive.org_bot|msnbot|MJ12bot|SeznamBot|linkdexbot|Netvibes|SMTBot|zgrab|James BOT)"],
 |  | 
 | 
											
												
													
														|  | -                    "actions": [
 |  | 
 | 
											
												
													
														|  | -                        {"name": "block",
 |  | 
 | 
											
												
													
														|  | -                         "params": {"message": "Rate limit exceeded"}}
 |  | 
 | 
											
												
													
														|  | -                    ]
 |  | 
 | 
											
												
													
														|  | -                },
 |  | 
 | 
											
												
													
														|  | -                {
 |  | 
 | 
											
												
													
														|  | -                    "name": "IP limit",
 |  | 
 | 
											
												
													
														|  | -                    "interval": <time-interval-in-sec>,
 |  | 
 | 
											
												
													
														|  | -                    "limit": <max-request-number-in-interval>,
 |  | 
 | 
											
												
													
														|  | -                    "stop": true,
 |  | 
 | 
											
												
													
														|  | -                    "aggregations": ["Header:X-Forwarded-For"],
 |  | 
 | 
											
												
													
														|  | -                    "actions": [
 |  | 
 | 
											
												
													
														|  | -                        {"name": "block",
 |  | 
 | 
											
												
													
														|  | -                         "params": {"message": "Rate limit exceeded"}}
 |  | 
 | 
											
												
													
														|  | -                    ]
 |  | 
 | 
											
												
													
														|  | -                },
 |  | 
 | 
											
												
													
														|  | -                {
 |  | 
 | 
											
												
													
														|  | -                    "name": "rss/json limit",
 |  | 
 | 
											
												
													
														|  | -                    "interval": <time-interval-in-sec>,
 |  | 
 | 
											
												
													
														|  | -                    "limit": <max-request-number-in-interval>,
 |  | 
 | 
											
												
													
														|  | -                    "stop": true,
 |  | 
 | 
											
												
													
														|  | -                    "filters": ["Param:format=(csv|json|rss)"],
 |  | 
 | 
											
												
													
														|  | -                    "actions": [
 |  | 
 | 
											
												
													
														|  | -                        {"name": "block",
 |  | 
 | 
											
												
													
														|  | -                         "params": {"message": "Rate limit exceeded"}}
 |  | 
 | 
											
												
													
														|  | -                    ]
 |  | 
 | 
											
												
													
														|  | -                },
 |  | 
 | 
											
												
													
														|  | -                {
 |  | 
 | 
											
												
													
														|  | -                    "name": "useragent limit",
 |  | 
 | 
											
												
													
														|  | -                    "interval": <time-interval-in-sec>,
 |  | 
 | 
											
												
													
														|  | -                    "limit": <max-request-number-in-interval>,
 |  | 
 | 
											
												
													
														|  | -                    "aggregations": ["Header:User-Agent"],
 |  | 
 | 
											
												
													
														|  | -                    "actions": [
 |  | 
 | 
											
												
													
														|  | -                        {"name": "block",
 |  | 
 | 
											
												
													
														|  | -                         "params": {"message": "Rate limit exceeded"}}
 |  | 
 | 
											
												
													
														|  | -                    ]
 |  | 
 | 
											
												
													
														|  | -                }
 |  | 
 | 
											
												
													
														|  | 
 |  | +   [{
 | 
											
												
													
														|  | 
 |  | +      "name":"search request",
 | 
											
												
													
														|  | 
 |  | +      "filters":[
 | 
											
												
													
														|  | 
 |  | +         "Param:q",
 | 
											
												
													
														|  | 
 |  | +         "Path=^(/|/search)$"
 | 
											
												
													
														|  | 
 |  | +      ],
 | 
											
												
													
														|  | 
 |  | +      "interval":"<time-interval-in-sec (int)>",
 | 
											
												
													
														|  | 
 |  | +      "limit":"<max-request-number-in-interval (int)>",
 | 
											
												
													
														|  | 
 |  | +      "subrules":[
 | 
											
												
													
														|  | 
 |  | +         {
 | 
											
												
													
														|  | 
 |  | +            "name":"roboagent limit",
 | 
											
												
													
														|  | 
 |  | +            "interval":"<time-interval-in-sec (int)>",
 | 
											
												
													
														|  | 
 |  | +            "limit":"<max-request-number-in-interval (int)>",
 | 
											
												
													
														|  | 
 |  | +            "filters":[
 | 
											
												
													
														|  | 
 |  | +               "Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client)"
 | 
											
												
													
														|  | 
 |  | +            ],
 | 
											
												
													
														|  | 
 |  | +            "actions":[
 | 
											
												
													
														|  | 
 |  | +               {
 | 
											
												
													
														|  | 
 |  | +                  "name":"block",
 | 
											
												
													
														|  | 
 |  | +                  "params":{
 | 
											
												
													
														|  | 
 |  | +                     "message":"Rate limit exceeded"
 | 
											
												
													
														|  | 
 |  | +                  }
 | 
											
												
													
														|  | 
 |  | +               }
 | 
											
												
													
														|  |              ]
 |  |              ]
 | 
											
												
													
														|  | -        }
 |  | 
 | 
											
												
													
														|  | -    ]
 |  | 
 | 
											
												
													
														|  | 
 |  | +         },
 | 
											
												
													
														|  | 
 |  | +         {
 | 
											
												
													
														|  | 
 |  | +            "name":"botlimit",
 | 
											
												
													
														|  | 
 |  | +            "limit":0,
 | 
											
												
													
														|  | 
 |  | +            "stop":true,
 | 
											
												
													
														|  | 
 |  | +            "filters":[
 | 
											
												
													
														|  | 
 |  | +               "Header:User-Agent=(Googlebot|bingbot|Baiduspider|yacybot|YandexMobileBot|YandexBot|Yahoo! Slurp|MJ12bot|AhrefsBot|archive.org_bot|msnbot|MJ12bot|SeznamBot|linkdexbot|Netvibes|SMTBot|zgrab|James BOT)"
 | 
											
												
													
														|  | 
 |  | +            ],
 | 
											
												
													
														|  | 
 |  | +            "actions":[
 | 
											
												
													
														|  | 
 |  | +               {
 | 
											
												
													
														|  | 
 |  | +                  "name":"block",
 | 
											
												
													
														|  | 
 |  | +                  "params":{
 | 
											
												
													
														|  | 
 |  | +                     "message":"Rate limit exceeded"
 | 
											
												
													
														|  | 
 |  | +                  }
 | 
											
												
													
														|  | 
 |  | +               }
 | 
											
												
													
														|  | 
 |  | +            ]
 | 
											
												
													
														|  | 
 |  | +         },
 | 
											
												
													
														|  | 
 |  | +         {
 | 
											
												
													
														|  | 
 |  | +            "name":"IP limit",
 | 
											
												
													
														|  | 
 |  | +            "interval":"<time-interval-in-sec (int)>",
 | 
											
												
													
														|  | 
 |  | +            "limit":"<max-request-number-in-interval (int)>",
 | 
											
												
													
														|  | 
 |  | +            "stop":true,
 | 
											
												
													
														|  | 
 |  | +            "aggregations":[
 | 
											
												
													
														|  | 
 |  | +               "Header:X-Forwarded-For"
 | 
											
												
													
														|  | 
 |  | +            ],
 | 
											
												
													
														|  | 
 |  | +            "actions":[
 | 
											
												
													
														|  | 
 |  | +               {
 | 
											
												
													
														|  | 
 |  | +                  "name":"block",
 | 
											
												
													
														|  | 
 |  | +                  "params":{
 | 
											
												
													
														|  | 
 |  | +                     "message":"Rate limit exceeded"
 | 
											
												
													
														|  | 
 |  | +                  }
 | 
											
												
													
														|  | 
 |  | +               }
 | 
											
												
													
														|  | 
 |  | +            ]
 | 
											
												
													
														|  | 
 |  | +         },
 | 
											
												
													
														|  | 
 |  | +         {
 | 
											
												
													
														|  | 
 |  | +            "name":"rss/json limit",
 | 
											
												
													
														|  | 
 |  | +            "interval":"<time-interval-in-sec (int)>",
 | 
											
												
													
														|  | 
 |  | +            "limit":"<max-request-number-in-interval (int)>",
 | 
											
												
													
														|  | 
 |  | +            "stop":true,
 | 
											
												
													
														|  | 
 |  | +            "filters":[
 | 
											
												
													
														|  | 
 |  | +               "Param:format=(csv|json|rss)"
 | 
											
												
													
														|  | 
 |  | +            ],
 | 
											
												
													
														|  | 
 |  | +            "actions":[
 | 
											
												
													
														|  | 
 |  | +               {
 | 
											
												
													
														|  | 
 |  | +                  "name":"block",
 | 
											
												
													
														|  | 
 |  | +                  "params":{
 | 
											
												
													
														|  | 
 |  | +                     "message":"Rate limit exceeded"
 | 
											
												
													
														|  | 
 |  | +                  }
 | 
											
												
													
														|  | 
 |  | +               }
 | 
											
												
													
														|  | 
 |  | +            ]
 | 
											
												
													
														|  | 
 |  | +         },
 | 
											
												
													
														|  | 
 |  | +         {
 | 
											
												
													
														|  | 
 |  | +            "name":"useragent limit",
 | 
											
												
													
														|  | 
 |  | +            "interval":"<time-interval-in-sec (int)>",
 | 
											
												
													
														|  | 
 |  | +            "limit":"<max-request-number-in-interval (int)>",
 | 
											
												
													
														|  | 
 |  | +            "aggregations":[
 | 
											
												
													
														|  | 
 |  | +               "Header:User-Agent"
 | 
											
												
													
														|  | 
 |  | +            ],
 | 
											
												
													
														|  | 
 |  | +            "actions":[
 | 
											
												
													
														|  | 
 |  | +               {
 | 
											
												
													
														|  | 
 |  | +                  "name":"block",
 | 
											
												
													
														|  | 
 |  | +                  "params":{
 | 
											
												
													
														|  | 
 |  | +                     "message":"Rate limit exceeded"
 | 
											
												
													
														|  | 
 |  | +                  }
 | 
											
												
													
														|  | 
 |  | +               }
 | 
											
												
													
														|  | 
 |  | +            ]
 | 
											
												
													
														|  | 
 |  | +         }
 | 
											
												
													
														|  | 
 |  | +      ]
 | 
											
												
													
														|  | 
 |  | +   }]
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -101,7 +132,7 @@ It listens on 127.0.0.1:4004 and forwards filtered requests to 127.0.0.1:8888 by
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  Use it along with ``nginx`` with the following example configuration.
 |  |  Use it along with ``nginx`` with the following example configuration.
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -.. code:: bash
 |  | 
 | 
											
												
													
														|  | 
 |  | +.. code:: nginx
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      location / {
 |  |      location / {
 | 
											
												
													
														|  |          proxy_set_header        Host    $http_host;
 |  |          proxy_set_header        Host    $http_host;
 |