Модуль Apache mod_authn_socache
| Описание: | Управляет кэшем учетных данных аутентификации, чтобы снизить нагрузку на серверы аутентификации |
|---|---|
| Статус: | Базовый |
| Идентификатор модуля: | authn_socache_module |
| Исходный файл: | mod_authn_socache.c |
| Совместимость: | Версия 2.3 и выше |
Краткое описание
Поддерживает кэш учетных данных аутентификации, чтобы не выполнять новый запрос к серверу аутентификации для каждого аутентифицированного запроса.
Кэширование аутентификации
Некоторые пользователи более ресурсоемких способов аутентификации, например с запросами к базе данных SQL (mod_authn_dbd), сообщали о чрезмерной нагрузке на сервер аутентификации. Типичный пример — HTML-страница, содержащая сотни объектов (изображения, скрипты, таблицы стилей, медиафайлы и т. д.), когда запрос страницы порождает сотни практически мгновенных запросов к дополнительному аутентифицированному содержимому.
mod_authn_socache решает эту проблему, поддерживая кэш учетных данных аутентификации.
Использование
Кэш аутентификации следует использовать, если запросы аутентификации создают значительную нагрузку на сервер, серверную систему или сеть. Аутентификация по файлу (mod_authn_file) или dbm (mod_authn_dbm), скорее всего, не даст преимуществ, поскольку эти способы сами по себе быстры и не требуют больших ресурсов (хотя в некоторых случаях, например при использовании файла на сетевом диске, кэширование может быть полезным). Другие способы, например аутентификация на основе SQL или LDAP, с большей вероятностью выиграют от кэширования, особенно при наличии проблем с производительностью. Среди стандартных модулей mod_authnz_ldap использует собственный кэш, поэтому обычно кэширование этого модуля будет полезно только для mod_authn_dbd.
Основные правила кэширования данных провайдера:
- Добавьте провайдера, для которого настраивается кэширование, в директиву
AuthnCacheProvideFor. - Укажите socache перед провайдером, для которого настраивается кэширование, в директиве
AuthBasicProviderилиAuthDigestProvider.
Пример использования dbm в качестве движка кэширования для ускорения работы mod_authn_dbd:
#AuthnCacheSOCache is optional. If specified, it is server-wide
AuthnCacheSOCache dbm
<Directory "/usr/www/myhost/private">
AuthType Basic
AuthName "Cached Authentication Example"
AuthBasicProvider socache dbd
AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"
AuthnCacheProvideFor dbd
Require valid-user
#Optional
AuthnCacheContext dbd-authn-example
</Directory> Кэширование в пользовательских модулях
Разработчикам модулей следует учитывать, что для включения кэширования их модулей необходимо использовать mod_authn_socache. Для кэширования учетных данных, которые провайдер только что получил или создал, предусмотрена одна необязательная функция API ap_authn_cache_store. Примеры использования доступны в r957072, где для кэширования включены три провайдера authn.
Директива AuthnCacheContext
| Описание: | Задает строку контекста для использования в ключе кэша |
|---|---|
| Синтаксис: | AuthnCacheContext directory|server|custom-string |
| Значение по умолчанию: | AuthnCacheContext directory |
| Контекст: | каталог |
| Статус: | Базовый |
| Модуль: | mod_authn_socache |
Эта директива задает строку, которая используется вместе с указанным именем пользователя (и областью в случае аутентификации Digest) при создании ключа кэша. Это позволяет различать одинаковые имена пользователей, используемые в разных областях аутентификации на сервере.
Для этой директивы предусмотрены два специальных значения: directory использует в качестве строки контекст каталога запроса, а server — имя виртуального хоста.
По умолчанию используется значение directory, которое также является наиболее осторожным вариантом. Вероятно, это не оптимально, поскольку, например, для $app-base, $app-base/images, $app-base/scripts и $app-base/media создаются отдельные ключи кэша. Лучше указать AuthnCacheContext для провайдера паролей: например, файл htpasswd или таблицу базы данных.
Контексты можно использовать совместно в разных областях сервера, если учетные данные общие. Однако это может создать условия для нарушений безопасности между сайтами или приложениями, поэтому эта директива запрещена в контекстах .htaccess.
Директива AuthnCacheEnable
| Описание: | Включает кэширование Authn, настроенное в любом месте |
|---|---|
| Синтаксис: | AuthnCacheEnable |
| Контекст: | конфигурация сервера |
| Статус: | Базовый |
| Модуль: | mod_authn_socache |
Обычно эта директива не требуется: она подразумевается, если кэширование аутентификации включено в любом месте httpd.conf. Однако если оно нигде не включено в httpd.conf, то по умолчанию кэш не будет инициализирован, а значит, будет недоступен в контексте .htaccess. Эта директива гарантирует его инициализацию, чтобы его можно было использовать в .htaccess.
Директива AuthnCacheProvideFor
| Описание: | Указывает провайдеры authn, для которых следует выполнять кэширование |
|---|---|
| Синтаксис: | AuthnCacheProvideFor authn-provider [...] |
| Значение по умолчанию: | None |
| Контекст: | каталог, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Базовый |
| Модуль: | mod_authn_socache |
Эта директива указывает один или несколько провайдеров аутентификации, для которых следует выполнять кэширование. Учетные данные, найденные провайдером, не указанным в директиве AuthnCacheProvideFor, кэшироваться не будут.
Например, чтобы кэшировать учетные данные, найденные с помощью mod_authn_dbd или пользовательского провайдера myprovider, но не кэшировать данные, полученные с помощью быстрых провайдеров, таких как поиск в файле или dbm:
AuthnCacheProvideFor dbd myprovider
Директива AuthnCacheSOCache
| Описание: | Выбирает используемый провайдер socache |
|---|---|
| Синтаксис: | AuthnCacheSOCache provider-name[:provider-args] |
| Контекст: | конфигурация сервера |
| Статус: | Базовый |
| Модуль: | mod_authn_socache |
| Совместимость: | Необязательные аргументы провайдера доступны в Apache HTTP Server 2.4.7 и более поздних версиях |
Этот параметр действует на уровне всего сервера и позволяет выбрать провайдер для кэша совместно используемых объектов, а также указать необязательные аргументы для этого провайдера. В качестве значения provider-name можно указать, например, "dbm", "dc", "memcache" или "shmcb"; для каждого из них должен быть загружен соответствующий модуль. Если параметр не задан, используется значение по умолчанию для вашей платформы.
Директива AuthnCacheTimeout
| Описание: | Задает время жизни записей кэша |
|---|---|
| Синтаксис: | AuthnCacheTimeout timeout (seconds) |
| Значение по умолчанию: | AuthnCacheTimeout 300 (5 minutes) |
| Контекст: | каталог, .htaccess |
| Переопределение: | AuthConfig |
| Статус: | Базовый |
| Модуль: | mod_authn_socache |
Кэширование данных аутентификации может представлять угрозу безопасности, хотя кратковременное кэширование вряд ли станет проблемой. Обычно оптимально кэшировать учетные данные ровно столько, сколько нужно для снижения нагрузки на серверную систему, но не дольше. Однако если изменения пользователей и паролей происходят редко, вам может подойти более длительный срок хранения. Значение по умолчанию — 300 секунд (5 минут) — достаточно осторожное и при этом позволяет заметно снизить нагрузку на серверную систему, например dbd (запросы к базе данных SQL).
Не следует путать это значение с временем ожидания сеанса — это совершенно разные параметры. Однако стоит проверить, не могут ли учетные данные из кэша случайно продлить сеанс в используемом ПО для управления сеансами, и учитывать это при задании времени ожидания.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_authn_socache.html