<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 模块

Apache 模块 mod_authn_socache

可用语言:  en  |  fr 

描述管理身份验证凭据缓存,以减轻后端负载
状态基础
模块标识符authn_socache_module
源文件mod_authn_socache.c
兼容性版本 2.3 及更高版本

摘要

维护身份验证凭据缓存,因此每个经过身份验证的请求都不需要新的后端查找。

Support Apache!

主题

指令

错误修复清单

另请参见

top

身份验证缓存

一些使用更重量级身份验证的用户,例如 SQL 数据库查找 (mod_authn_dbd) 报告说,它给他们的身份验证提供者带来了不可接受的负载。一个典型的例子是,当一个 HTML 页面包含数百个对象(图像、脚本、样式表、媒体等)时,对该页面的请求会生成数百个实际上是立即的请求,以获取经过身份验证的附加内容。

mod_authn_socache 通过维护身份验证凭据缓存来解决此问题。

top

用法

在身份验证查找给服务器或后端或网络带来重大负载的情况下,应使用身份验证缓存。通过文件 (mod_authn_file) 或 dbm (mod_authn_dbm) 进行身份验证不太可能受益,因为它们本身速度快且重量轻(尽管在某些情况下,例如网络挂载的文件,缓存可能会有所帮助)。其他提供者,例如基于 SQL 或 LDAP 的身份验证,更有可能受益,尤其是在观察到性能问题的情况下。在标准模块中,mod_authnz_ldap 管理自己的缓存,因此通常只有 mod_authn_dbd 会从该缓存中受益。

为提供者缓存的基本规则是

  1. 将您要缓存的提供者包含在 AuthnCacheProvideFor 指令中。
  2. 在您的 AuthBasicProviderAuthDigestProvider 指令中,将 socache 列在您要缓存的提供者之前。

使用 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>
top

使用自定义模块进行缓存

模块开发人员应注意,他们的模块必须使用 mod_authn_socache 启用缓存。提供了一个可选的 API 函数 ap_authn_cache_store 来缓存提供者刚刚查找或生成的凭据。使用示例可在 r957072 中找到,其中三个 authn 提供者已启用缓存。

top

AuthnCacheContext 指令

描述指定要在缓存键中使用的上下文字符串
语法AuthnCacheContext directory|server|custom-string
默认值AuthnCacheContext directory
上下文directory
状态基础
模块mod_authn_socache

此指令指定一个字符串,该字符串将与提供的用户名(以及在摘要身份验证的情况下提供的领域)一起用于构建缓存键。这有助于区分服务器上为不同身份验证区域提供服务的相同用户名。

此指令的两个特殊值是 directory,它使用请求的目录上下文作为字符串,以及 server,它使用虚拟主机名。

默认值为 directory,这也是最保守的设置。这可能不是最佳选择,因为它(例如)会导致 $app-base$app-base/images$app-base/scripts$app-base/media 每个都有自己的独立缓存键。更好的策略是为密码提供者命名 AuthnCacheContext:例如 htpasswd 文件或数据库表。

上下文可以在服务器的不同区域共享,其中凭据是共享的。但是,这有可能成为跨站点或跨应用程序安全漏洞的媒介,因此此指令在 .htaccess 上下文中不允许使用。

top

AuthnCacheEnable 指令

描述启用在任何地方配置的 Authn 缓存
语法AuthnCacheEnable
上下文服务器配置
状态基础
模块mod_authn_socache

此指令通常不需要:如果在 httpd.conf 中的任何地方启用了身份验证缓存,则会隐式启用它。但是,如果在 httpd.conf 中的任何地方都没有启用它,则默认情况下它不会初始化,因此在 .htaccess 上下文中不可用。此指令确保它已初始化,以便可以在 .htaccess 中使用。

top

AuthnCacheProvideFor 指令

描述指定要缓存的 authn 提供者
语法AuthnCacheProvideFor authn-provider [...]
默认值
上下文directory, .htaccess
覆盖AuthConfig
状态基础
模块mod_authn_socache

此指令指定要缓存的身份验证提供者。在 AuthnCacheProvideFor 指令中未列出的提供者找到的凭据将不会被缓存。

例如,要缓存由 mod_authn_dbd 或自定义提供者 myprovider 找到的凭据,但保留由轻量级提供者(如文件或 dbm 查找)查找的凭据

AuthnCacheProvideFor dbd myprovider
top

AuthnCacheSOCache 指令

描述选择要使用的 socache 后端提供者
语法AuthnCacheSOCache provider-name[:provider-args]
上下文服务器配置
状态基础
模块mod_authn_socache
兼容性可选的提供者参数在 Apache HTTP 服务器 2.4.7 及更高版本中可用

这是一个服务器范围的设置,用于选择 共享对象缓存 的提供者,然后是该提供者的可选参数。provider-name 的一些可能值是“dbm”、“dc”、“memcache”或“shmcb”,每个值都取决于是否加载了相应的模块。如果未设置,将使用平台的默认值。

top

AuthnCacheTimeout 指令

描述为缓存条目设置超时
语法AuthnCacheTimeout timeout(秒)
默认值AuthnCacheTimeout 300(5 分钟)
上下文directory, .htaccess
覆盖AuthConfig
状态基础
模块mod_authn_socache

缓存身份验证数据可能是一个安全问题,尽管短期缓存不太可能成为问题。通常,一个好的解决方案是缓存凭据,直到减轻后端负载为止,但不再缓存,尽管如果对用户和密码的更改很少,那么更长的超时可能适合您。默认的 300 秒(5 分钟)既谨慎又足以将 dbd(SQL 数据库查询)等后端的负载降低。

这与会话超时无关,会话超时是一个完全独立的问题。但是,您可能希望检查您的会话管理软件,以了解缓存的凭据是否会“意外地”延长会话,并在设置超时时牢记这一点。

可用语言:  en  |  fr 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果这些建议已实施或被认为无效/与主题无关,则可能会被我们的版主删除。有关如何管理 Apache HTTP 服务器的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表