Apache HTTP 服务器版本 2.4
描述 | 管理身份验证凭据缓存,以减轻后端负载 |
---|---|
状态 | 基础 |
模块标识符 | 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
指令中。AuthBasicProvider
或 AuthDigestProvider
指令中,将 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>
模块开发人员应注意,他们的模块必须使用 mod_authn_socache
启用缓存。提供了一个可选的 API 函数 ap_authn_cache_store 来缓存提供者刚刚查找或生成的凭据。使用示例可在 r957072 中找到,其中三个 authn 提供者已启用缓存。
描述 | 指定要在缓存键中使用的上下文字符串 |
---|---|
语法 | 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 上下文中不允许使用。
描述 | 启用在任何地方配置的 Authn 缓存 |
---|---|
语法 | AuthnCacheEnable |
上下文 | 服务器配置 |
状态 | 基础 |
模块 | mod_authn_socache |
此指令通常不需要:如果在 httpd.conf 中的任何地方启用了身份验证缓存,则会隐式启用它。但是,如果在 httpd.conf 中的任何地方都没有启用它,则默认情况下它不会初始化,因此在 .htaccess 上下文中不可用。此指令确保它已初始化,以便可以在 .htaccess 中使用。
描述 | 指定要缓存的 authn 提供者 |
---|---|
语法 | AuthnCacheProvideFor authn-provider [...] |
默认值 | 无 |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 基础 |
模块 | mod_authn_socache |
此指令指定要缓存的身份验证提供者。在 AuthnCacheProvideFor
指令中未列出的提供者找到的凭据将不会被缓存。
例如,要缓存由 mod_authn_dbd
或自定义提供者 myprovider 找到的凭据,但保留由轻量级提供者(如文件或 dbm 查找)查找的凭据
AuthnCacheProvideFor dbd myprovider
描述 | 选择要使用的 socache 后端提供者 |
---|---|
语法 | AuthnCacheSOCache provider-name[:provider-args] |
上下文 | 服务器配置 |
状态 | 基础 |
模块 | mod_authn_socache |
兼容性 | 可选的提供者参数在 Apache HTTP 服务器 2.4.7 及更高版本中可用 |
这是一个服务器范围的设置,用于选择 共享对象缓存 的提供者,然后是该提供者的可选参数。provider-name 的一些可能值是“dbm”、“dc”、“memcache”或“shmcb”,每个值都取决于是否加载了相应的模块。如果未设置,将使用平台的默认值。
描述 | 为缓存条目设置超时 |
---|---|
语法 | AuthnCacheTimeout timeout(秒) |
默认值 | AuthnCacheTimeout 300(5 分钟) |
上下文 | directory, .htaccess |
覆盖 | AuthConfig |
状态 | 基础 |
模块 | mod_authn_socache |
缓存身份验证数据可能是一个安全问题,尽管短期缓存不太可能成为问题。通常,一个好的解决方案是缓存凭据,直到减轻后端负载为止,但不再缓存,尽管如果对用户和密码的更改很少,那么更长的超时可能适合您。默认的 300 秒(5 分钟)既谨慎又足以将 dbd(SQL 数据库查询)等后端的负载降低。
这与会话超时无关,会话超时是一个完全独立的问题。但是,您可能希望检查您的会话管理软件,以了解缓存的凭据是否会“意外地”延长会话,并在设置超时时牢记这一点。