Q: Я хочу иметь возможность включить базовую аутентификацию только для тех запросов, которые включают в себя определенный заголовок.
Пример использования: Запрашивать аутентификацию только для определенных клиентов, запросы которых проходят через LB (и совпадают по заголовкам, заданным LB).
Я попробовал поиграть с директивой IF, но не вышло. У Anynone есть небольшой пример конфигурации, как это сделать?
Согласно документации auth_basic
директиву, вы не можете использовать директиву в if
блок, но вы можете использовать переменные в качестве значений.
Поэтому используйте карту для проверки конкретных условий и используйте полученную переменную.
map $http_<header_name> $authentication {
default "off";
"~^" "my_realm";
}
server {
...
location /foo {
auth_basic $authentication;
auth_basic_user_file /path/to/htpasswd/file;
...
}
}
В <header_name>
шаблон необходимо заменить на имя заголовка, используя строчные буквы и подчеркивание вместо тире (например, My-Header
становится $http_my_header
)