return error 410 for location regex? in nginx
I'm using nginx-1.6.2,2
and I'd like return error 410
for URL that matches /browse.php?u=http
, so requests such as this will get 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)"
I don't really need regex
, so something like this, but it's not working:
location = /browse.php?u=http {
return 410;
}
couple of days later, I grep -c
for 410
in /var/log/nginx-access.log
$ bzip2 -cd /var/log/nginx-access.log.0.bz2 | grep -c ' 410 '
5665
$
and that made me feel warm and fuzzy) thanks again!
You can't match the query string in the declaration of a location statement so you need something like this :
location = /browse.php {
if ($arg_u ~ "^http") {
return 410;
}
}