描述: | 管理身份验证凭据的缓存以减轻后端的负担 |
---|---|
状态: | 基础 |
模块标识符: | 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
一个简单的使用示例,用于加速mod_authn_dbd
将dbm用作缓存引擎:
#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 directory|server|custom-string |
默认: | AuthnCacheContext directory |
内容: | 目录 |
状态: | 基础 |
模块: | mod_authn_socache |
该伪指令指定一个字符串,该字符串与提供的用户名(在摘要式身份验证的情况下为领域)一起使用,以构造缓存密钥。这可消除为服务器上不同身份验证区域提供服务的相同用户名的歧义。
两个特殊的值是directory
,它使用请求的目录上下文作为字符串,并server
使用虚拟主机名。
默认值为directory
,这也是最保守的设置。这可能不是最佳选择,因为它(例如)导致$ app-base,$ app-base / images,
$ app-base / scripts和$ app-base / media各自具有自己的单独的缓存键。更好的策略是AuthnCacheContext
为密码提供者命名
:例如htpasswd文件或数据库表。
可以在共享凭据的服务器的不同区域之间共享上下文。但是,这有可能成为跨站点或跨应用程序安全漏洞的媒介,因此在.htaccess上下文中不允许使用此指令。
描述: | 启用在任何地方配置的身份验证缓存 |
---|---|
句法: | AuthnCacheEnable |
内容: | 服务器配置 |
状态: | 基础 |
模块: | mod_authn_socache |
该指令通常不是必需的:如果在httpd.conf中的任何位置启用了身份验证缓存,则意味着该指令。但是,如果未在httpd.conf中的任何位置启用 它,则默认情况下将不对其进行初始化,因此在.htaccess上下文中不可用。该指令确保将其初始化,以便可以在.htaccess中使用。
描述: | 指定要为其缓存的身份验证提供程序 |
---|---|
句法: | AuthnCacheProvideFor authn-provider [...] |
默认: | None |
内容: | 目录.htaccess |
覆写: | 验证配置 |
状态: | 基础 |
模块: | mod_authn_socache |
该伪指令指定一个或多个身份验证提供程序进行缓存。由提供程序找到的未在AuthnCacheProvideFor
指令中列出的凭据
将不会被缓存。
例如,要缓存mod_authn_dbd
由自定义提供程序myprovider或由自定义提供程序找到的凭据,但不保留由轻量级提供程序(如文件或dbm查找)查找的凭据:
AuthnCacheProvideFor dbd myprovider
描述: | 选择要使用的socache后端提供程序 |
---|---|
句法: | AuthnCacheSOCache provider-name[:provider-args] |
内容: | 服务器配置 |
状态: | 基础 |
模块: | mod_authn_socache |
兼容性: | 可选的提供程序参数在Apache HTTP Server 2.4.7和更高版本中可用 |
这是服务器范围的设置,用于为共享库缓存选择提供程序 ,后跟该提供程序的可选参数。provider-name的某些可能值为“ dbm”,“ dc”,“ memcache”或“ shmcb”,每个值都取决于要加载的适当模块。如果未设置,将使用您平台的默认设置。
描述: | 设置缓存条目超时 |
---|---|
句法: | AuthnCacheTimeout timeout (seconds) |
默认: | AuthnCacheTimeout 300 (5 minutes) |
内容: | 目录.htaccess |
覆写: | 验证配置 |
状态: | 基础 |
模块: | mod_authn_socache |
缓存身份验证数据可能是一个安全问题,尽管短期缓存不太可能成为问题。通常,一个好的解决方案是将凭据缓存的时间尽可能长,以减轻后端的负载,但不要再缓存它了,尽管如果不经常更改用户名和密码,则较长的超时时间可能适合您。默认的300秒(5分钟)既谨慎又充足,可以使dbd(SQL数据库查询)等后端的负载保持较低。
这不应与会话超时混淆,后者是一个完全独立的问题。但是,您可能希望检查会话管理软件,以了解缓存的凭据是否可以“意外”扩展会话,并在设置超时时记住这一点。