A documentação do nginx explica seu caso: link
nginx first searches for the most specific prefix location given by literal strings regardless of the listed order. In the configuration above the only prefix location is “/” and since it matches any request it will be used as a last resort. Then nginx checks locations given by regular expression in the order listed in the configuration file. The first matching expression stops the search and nginx will use this location. If no regular expression matches a request, then nginx uses the most specific prefix location found earlier.
seguindo esta declaração /login
somente coincide se não houver regex correspondente. Se você acessar /login/login.php
, por exemplo, seu location ~ \.php($|/)
ganhará a eleição de quem receberá essa solicitação.
SOLUÇÃO 1
Para corrigir o problema, defina este local ACIMA DO php location
location ~* /login {
allow 5.80.29.130;
deny all;
}
SOLUÇÃO 2
use
location ^~ /login {
allow 5.80.29.130;
deny all;
}
O link explica que ^~
desativa a correspondência de regex se esse local da sequência de caracteres de prefixo corresponder. / p>