За їхньою документацією, if
це Зло . Вони навели кілька прикладів того, що певні конфігурації не працюватимуть, якщо if
буде використано директиву. Вони не вникають у деталі щодо того, чому він поводиться неправильно інакше, ніж може сподіватися користувач, або наводять приклади, як переписати ці екземпляри.
Однак вони посилаються на цю статтю , яка дає рудиментарне пояснення, що if
-директива в location
-директиві створює ще один "псевдо- location
", який ігнорує інші location
блоки.
Однак приклади здаються мені протиінтуїтивними навіть з поясненням. Як таке, я хотів дізнатися, чи безпечна моя конкретна конфігурація, а якщо ні, як можна краще переписати. Я зробив власне тестування, звичайно, і, здається, поводиться правильно. Наступний приклад - лише відповідний фрагмент файлу конфігурації:
ssl_client_verify optional;
location /public {
try_files $uri $uri/ =404;
}
location / {
if ($ssl_client_verify != SUCCESS)
{
return 403;
}
try_files $uri $uri/ =404;
}
Моє основне занепокоєння щодо безпеки полягає в тому, що я хочу уникати відкриття будь-якого вмісту, який не знаходиться /public
у тих, хто не має дійсного сертифіката.