Question renvoyer l'erreur 410 pour l'emplacement regex? dans nginx


j'utilise nginx-1.6.2,2 et j'aimerais revenir error 410 pour l'URL qui correspond /browse.php?u=http, les demandes de ce type obtiendront donc 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)"

Je n'ai pas vraiment besoin regex, donc quelque chose comme ça, mais ça ne marche pas:

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

quelques jours plus tard, je grep -c pour 410 dans /var/log/nginx-access.log

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

et cela m'a fait sentir chaud et flou) merci encore!


5
2017-11-21 18:03


origine




Réponses:


C'est parce que l'emplacement est /browse.php, pas celui que vous avez spécifié.

Il y a plusieurs façons de le faire. Par exemple, quelque chose comme ceci devrait faire:

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

P.S .: ou utiliser ~* au lieu de ~ si u=http est insensible à la casse.


0
2017-11-21 18:11





Vous ne pouvez pas faire correspondre la chaîne de requête dans la déclaration d'une déclaration d'emplacement. Vous avez donc besoin de quelque chose comme:

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

4
2017-11-21 18:11



alors que j'aime votre réponse est mieux que @ Nochkin, j'essaie de rester loin de regex, alors je vais voter votre réponse! Merci encore! - alexus
@ alexus Cela ne correspond pas à l'exemple que vous avez donné. - Xavier Lucas
oui, je viens de le tester et je suis venu à cette conclusion aussi. - alexus
Juste pour être complet, le $ arg_u correspond au paramètre de requête u. nginx.org/en/docs/http/ngx_http_core_module.html#variables - Rick-777