De acordo com a própria documentação, if
is Evil . Eles deram vários exemplos de que certas configurações não funcionarão se uma diretiva if
for usada. Eles não entram em detalhes sobre o porquê de se comportarem de maneira diferente do que o usuário pode esperar, ou dar exemplos sobre como reescrever essas instâncias.
O que eles fazem, no entanto, é vincular a este artigo , o que dá uma explicação rudimentar de que um if
-directive dentro de um location
-directive cria outro "pseudo- location
", que ignora os outros location
blocos.
No entanto, os exemplos parecem contra-intuitivos para mim, mesmo com a explicação. Como tal, queria saber se a minha configuração específica é segura e, em caso negativo, como poderia ser melhor reescrita. Eu fiz meus próprios testes, claro, e parece se comportar corretamente. O exemplo a seguir é apenas o fragement relevante do arquivo de configuração:
ssl_client_verify optional;
location /public {
try_files $uri $uri/ =404;
}
location / {
if ($ssl_client_verify != SUCCESS)
{
return 403;
}
try_files $uri $uri/ =404;
}
Minha principal preocupação de segurança é evitar a exposição de qualquer conteúdo que não esteja em /public
a qualquer pessoa que não tenha um certificado válido.