How to limit_req depending if the requests has a REFERER or not.
Valentin V. Bartenev
ne at vbart.ru
Tue Jun 5 23:31:03 UTC 2012
On Wednesday 06 June 2012 02:33:09 Joseph Cabezas wrote:
> I have something like this... I need to be able to apply three different
> limit_req depending:
>
> a.) If the referer to click.php is domain.com ... apply zone1
> b.) If there is some other referer apply zone2 on click.php
> c.) If there is no referer apply zone3 on click.php
>
>
> location /click.php { limit_req zone=one; proxy_pass http://backend; }
>
Probably, something like this will work:
http {
map $http_referer $is_referer {
default '';
~^. 1;
}
map $is_referer $no_referer {
default 1;
1 '';
}
map $invalid_referer $zone1 {
0 1;
1 '';
}
map $invalid_referer $zone2 {
0 '';
1 $is_referer;
}
map $invalid_referer $zone3 {
0 '';
1 $no_referer;
}
limit_req_zone $zone1 zone=zone1:128k rate=50r/s;
limit_req_zone $zone2 zone=zone2:128k rate=10r/s;
limit_req_zone $zone3 zone=zone3:128k rate=3r/s;
server {
valid_referers domain.com;
location /click.php {
limit_req zone=zone3 burst=12;
limit_req zone=zone2 burst=10 nodelay;
limit_req zone=zone1 burst=100 nodelay;
...
wbr, Valentin V. Bartenev
More information about the nginx
mailing list