Назад | Перейти на главную страницу

Базовая аутентификация, только если в запросе присутствует определенный заголовок?

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)