erro de retorno 410 para localização regex? em nginx

5

Estou usando nginx-1.6.2,2 e gostaria de devolver error 410 para URL que corresponda a /browse.php?u=http , portanto, solicitações como essa receberão 410:

162.218.208.16 - - [21/Nov/2014:12:35:40 -0500] "GET /browse.php?u=http%3A%2F%2Fwww.bing.com%2Fsearch%3Fq%3DBroke%2C%2BUSA%2Bfiletype%3Apdf%26first%3D0%26count%3D20%26format%3Drss&b=156&f=norefer HTTP/1.1" 403 570 "http://ww.thespacesurf.com/browse.php?u=http%3A%2F%2Fwww.bing.com%2Fsearch%3Fq%3DBroke%2C%2BUSA%2Bfiletype%3Apdf%26first%3D0%26count%3D20%26format%3Drss&b=156&f=norefer" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)"

Eu realmente não preciso de regex , algo assim, mas não está funcionando:

location = /browse.php?u=http {
        return 410;
}

Alguns dias depois, eu grep -c para 410 in /var/log/nginx-access.log

$ bzip2 -cd /var/log/nginx-access.log.0.bz2 | grep -c ' 410 '
5665
$ 

e isso me fez sentir quente e confuso) obrigado novamente!

    
por alexus 21.11.2014 / 19:03

2 respostas

0

Isso ocorre porque o local é /browse.php , não o que você especificou.

Existem várias maneiras de fazer isso. Por exemplo, algo assim deveria ser feito:

location = /browse.php {
        if ($query_string ~ ^u=http) {
                return 410;
        }
}

P.S .: ou use ~* em vez de ~ se u=http não diferenciar maiúsculas de minúsculas.

    
por 21.11.2014 / 19:11
4

Você não pode corresponder a string de consulta na declaração de uma declaração de localização para que você precise de algo assim:

location = /browse.php {
    if ($arg_u ~ "^http") { 
        return 410;
    }
}
    
por 21.11.2014 / 19:11

Tags