On this page
Apache 模块 mod_authn_socache
Description: | Management 身份验证凭据的缓存以减轻后端的负担 |
---|---|
Status: | Base |
Module Identifier: | authn_socache_module |
Source File: | mod_authn_socache.c |
Compatibility: | 2.3 及更高版本 |
Summary
维护身份验证凭据的高速缓存,因此不需要为每个经过身份验证的请求进行新的后端查找。
Authentication Caching
一些重量级身份验证的用户(例如 SQL 数据库查找(mod_authn_dbd))报告说,这给他们的身份验证提供程序带来了不可接受的负担。一个典型的例子是 HTML 页面包含数百个对象(图像,脚本,样式表,媒体等),并且对该页面的请求会生成数百个对已认证的其他内容的有效即时请求。
mod_authn_socache通过维护身份验证凭据的缓存来提供此问题的解决方案。
Usage
在身份验证查找对服务器,后端或网络造成较大负载的情况下,应使用身份验证缓存。通过文件(mod_authn_file)或 dbm(mod_authn_dbm)进行身份验证不太可能受益,因为它们本身具有快速,轻便的特性(尽管在某些情况下,例如网络安装的文件,缓存可能是值得的)。其他提供程序(例如基于 SQL 或 LDAP 的身份验证)更可能受益,特别是在存在明显性能问题的地方。在标准模块中,mod_authnz_ldapManagement 自己的缓存,因此通常只有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中提供了使用示例,其中启用了三个身份验证提供程序进行缓存。
AuthnCacheContext Directive
Description: | 指定要在缓存键中使用的上下 Literals 符串 |
---|---|
Syntax: | AuthnCacheContext directory|server|custom-string |
Default: | AuthnCacheContext directory |
Context: | directory |
Status: | Base |
Module: | mod_authn_socache |
该伪指令指定一个字符串,该字符串与提供的用户名(在摘要式身份验证的情况下为领域)一起使用,以构造缓存密钥。这用于消除服务于服务器上不同身份验证区域的相同用户名的歧义。
两个特殊的值是directory
(使用请求的目录上下文作为字符串)和server
(使用虚拟主机名)。
默认值为directory
,这也是最保守的设置。这可能不是最佳选择,因为它(例如)导致$ app-base,$ app-base/images,$ app-base/scripts 和$ app-base/media 各自具有自己的单独的缓存键。更好的策略是为密码提供者命名AuthnCacheContext
:例如 htpasswd 文件或数据库表。
可以在共享凭据的服务器的不同区域之间共享上下文。但是,这有可能成为跨站点或跨应用程序安全漏洞的媒介,因此在.htaccess 上下文中不允许使用此指令。
AuthnCacheEnable Directive
Description: | 启用在任何地方配置的身份验证缓存 |
---|---|
Syntax: | AuthnCacheEnable |
Context: | server config |
Status: | Base |
Module: | mod_authn_socache |
该指令通常不是必需的:如果在 httpd.conf 中的任何位置启用了身份验证缓存,则意味着该指令。但是,如果未在 httpd.conf 中的任何位置启用它,则默认情况下将不对其进行初始化,因此在.htaccess 上下文中不可用。该指令确保将其初始化,以便可以在.htaccess 中使用。
AuthnCacheProvideFor Directive
Description: | 指定要为其缓存的身份验证提供程序 |
---|---|
Syntax: | AuthnCacheProvideFor authn-provider [...] |
Default: | None |
Context: | directory, .htaccess |
Override: | AuthConfig |
Status: | Base |
Module: | mod_authn_socache |
此伪指令指定一个或多个身份验证提供程序进行缓存。未在AuthnCacheProvideFor
指令中列出的提供者找到的凭据将不会被缓存。
例如,要缓存由mod_authn_dbd或自定义提供程序 myprovider 找到的凭据,但不让那些轻量级提供程序(如文件或 dbm 查找)查找的凭据:
AuthnCacheProvideFor dbd myprovider
AuthnCacheSOCache Directive
Description: | 选择要使用的 socache 后端提供程序 |
---|---|
Syntax: | AuthnCacheSOCache provider-name[:provider-args] |
Context: | server config |
Status: | Base |
Module: | mod_authn_socache |
Compatibility: | 可选的提供程序参数在 Apache HTTP Server 2.4.7 和更高版本中可用 |
这是服务器范围的设置,用于为共享对象缓存选择提供程序,后跟该提供程序的可选参数。 provider-name 的一些可能值为“ dbm”,“ dc”,“ memcache”或“ shmcb”,每个值都取决于要加载的适当模块。如果未设置,将使用您平台的默认设置。
AuthnCacheTimeout Directive
Description: | 设置缓存条目超时 |
---|---|
Syntax: | AuthnCacheTimeout timeout (seconds) |
Default: | AuthnCacheTimeout 300 (5 minutes) |
Context: | directory, .htaccess |
Override: | AuthConfig |
Status: | Base |
Module: | mod_authn_socache |
缓存身份验证数据可能是一个安全问题,尽管短期缓存不太可能成为问题。通常,一个很好的解决方案是将凭据缓存的时间尽可能长,以减轻后端的负载,但不要再缓存它了,尽管如果不经常更改用户名和密码,则较长的超时时间可能适合您。默认的 300 秒(5 分钟)既谨慎又充足,可以使 dbd(SQL 数据库查询)等后端的负载保持较低。
这不应与会话超时混淆,后者是一个完全独立的问题。但是,您可能希望检查会话 Management 软件,以了解缓存的凭据是否可以“意外”扩展会话,并在设置超时时牢记这一点。