usar se diretiva no bloco de localização é algo que precisa ser evitado. Porque configuração nginx usando linguagem declarativa. Portanto, se você estiver usando if diretiva no bloco de localização e a primeira condição se for cumprida, a outra diretriz if não será executada. então minha sugestão é mudar se diretiva de bloco de localização para bloco de servidor. aqui está a documentação e o artigo se você quiser saber mais:
- link
- agentzh.blogspot.com/2011/03/how-nginx-location-if-works.html
Atualização: você pode fazer algo assim. Eu não testei sozinho, então eu acho que vai ter um erro de sintaxe. Mas acho que você entendeu a ideia.
server{
...
#for location /
set $Location_VerifySSL 'root';
#for location /app/
if ($request_uri ~* '^(/app)){
set $Location_VerifySSL 'app';
}
set $Location_VerifySSL "$Location_VerifySSL_success";
if ($ssl_client_verify != 'SUCCESS'){
set $Location_VerifySSL "$Location_VerifySSL_fail";
}
if ($Location_VerifySSL = "root_fail") {
return 403;
}
if ($Location_VerifySSL = "app_success") {
return 200 'This is when url match ^(/app) and ';
}
...
location /{
...
}
...
}