O nginx só aplica um bloco de localização em cada nível da configuração. Todos os arquivos 404ing são arquivos .php
que atingem o bloco \.php
location e, portanto, não usam o bloco /
location que contém o bloco do agente do usuário. Para corrigir isso, mova seu bloco de agente do usuário para fora do bloco de localização para o nível raiz, de modo que ele seja aplicado a todas as solicitações.
if ($http_user_agent ~* "morfeus fucking scanner|ZmEu") {
return 403;
}
location / {
...
}
location \.php {
...
}
Editar: você pode testar isso com algo como curl
, que permite definir cabeçalhos arbitrários:
% curl -I localhost/sf645/blah
HTTP/1.1 404 Not Found
% curl -I -H 'User-agent: ZmEu' localhost/sf645/blah
HTTP/1.1 403 Forbidden
% curl -I -H 'User-agent: morfeus fucking scanner' localhost/sf645/blah
HTTP/1.1 403 Forbidden