mod_authn_socache
描述: | 管理身份验证凭据的缓存以减轻后端负载 |
状态: | Base |
模块标识符: | authn_socache_module |
源文件: | mod_authn_socache.c |
兼容性: | Version 2.3 以及之后 |
摘要
维护身份验证凭据的缓存,以便每个经过身份验证的请求都不需要新的后端查找。
身份验证缓存
一些更重量级身份验证的用户(例如 SQL 数据库查找(mod_authn_dbd))已经报告它在其身份验证提供程序上施加了不可接受的负载。一个典型的例子是 HTML 页面包含数百个 objects(图像,脚本,样式表,媒体等),对页面的请求会生成数百个 effectively-immediate 请求,用于经过身份验证的其他内容。
mod_authn_socache通过维护身份验证凭据的缓存来提供此问题的解决方案。
用法
在身份验证查找对服务器或后端或网络造成重大负载的情况下,应使用身份验证缓存。按文件(mod_authn_file)或 dbm(mod_authn_dbm)进行身份验证不太可能受益,因为它们本身快速且轻量级(尽管在某些情况下,例如 network-mounted 文件,缓存可能是值得的)。其他提供程序(如基于 SQL 或 LDAP 的身份验证)更有可能受益,尤其是在存在已观察到的 performance 问题的情况下。在标准模块中,mod_authnz_ldap管理自己的缓存,因此只有mod_authn_dbd通常会从此缓存中受益。
缓存供应商的基本规则是:
- 在AuthnCacheProvideFor指令中包含要缓存的提供程序。
- 在您正在AuthBasicProvider或AuthDigestProvider 指令指令中缓存的提供程序之前列出 socache。
使用 dbm 作为缓存引擎加速mod_authn_dbd的简单用法 example:
#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 function ap_authn_cachestore 来缓存提供者刚刚查找或生成的缓存凭据。用法示例在r957072中可用,其中启用了三个 authn 提供程序进行高速缓存。
AuthnCacheContext 指令
描述: | 指定 context string 以在缓存 key 中使用 |
句法: | AuthnCacheContext directory\|server\|custom-string |
默认: | AuthnCacheContext directory |
Context: | 目录 |
状态: | Base |
模块: | mod_authn_socache |
该指令指定在构造缓存 key 时与所提供的用户名(以及摘要式身份验证的领域)一起使用的 string。这用于消除服务于服务器上的不同认证区域的相同用户名的歧义。
对此的两个特殊值是directory
,它使用请求的目录 context 作为 string,而server
使用虚拟 host name。
默认值为directory
,这也是最保守的设置。这可能不是最优的,因为它(对于 example)导致$app-base,$app-base/images,$app-base/scripts 和$app-base/media 各自拥有自己独立的缓存 key。更好的 policy 是 name AuthnCacheContext
为密码提供者:为 example 一个 htpasswd 文件或数据库 table。
上下文可以在服务器的不同区域共享,其中共享凭证。但是,这有可能成为 cross-site 或 cross-application 安全漏洞的向量,因此在.htaccess 上下文中不允许使用此指令。
AuthnCacheEnable 指令
描述: | 在任何地方启用 Authn 缓存 |
句法: | AuthnCacheEnable |
Context: | 服务器配置 |
状态: | Base |
模块: | mod_authn_socache |
通常不需要此指令:如果在 httpd.conf 中的任何位置启用了身份验证缓存,则暗示该指令。但是,如果在 httpd.conf 中未启用它,则默认情况下不会初始化,因此在.htaccess context 中不可用。该指令确保它被初始化,因此可以在.htaccess 中使用。
AuthnCacheProvideFor 指令
描述: | 指定要缓存的 authn provider(s) |
句法: | AuthnCacheProvideFor authn-provider[...] |
默认: | None |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | Base |
模块: | mod_authn_socache |
该指令指定要缓存的身份验证提供程序。未在AuthnCacheProvideFor
指令中列出的提供程序找到的凭据将不会被缓存。
例如,要缓存由mod_authn_dbd或自定义提供程序 myprovider 找到的凭据,但请保留由轻量级提供程序(如文件或 dbm 查找)单独查找的凭据:
AuthnCacheProvideFor dbd myprovider
AuthnCacheSOCache 指令
描述: | 选择要使用的 socache 后端提供程序 |
句法: | AuthnCacheSOCache provider-name[:provider-args] |
Context: | 服务器配置 |
状态: | Base |
模块: | mod_authn_socache |
兼容性: | Apache HTTP Server 2.4.7 及更高版本中提供了可选的提供程序 arguments |
这是一个 server-wide 设置,用于选择共享 object 缓存的提供程序,然后是该提供程序的可选 arguments。 provider-name 的一些可能值是“dbm”,“dc”,“memcache”或“shmcb”,每个值都受加载的相应模块的影响。如果未设置,将使用您平台的默认值。
AuthnCacheTimeout 指令
描述: | 设置缓存条目的超时 |
句法: | AuthnCacheTimeout timeout(seconds) |
默认: | AuthnCacheTimeout 300(5 minutes) |
Context: | 目录,.htaccess |
覆盖: | AuthConfig |
状态: | Base |
模块: | mod_authn_socache |
缓存身份验证数据可能是一个安全问题,但 short-term 缓存不太可能成为问题。通常,一个好的解决方案是将凭据缓存为 long,以减轻后端的负载,但不再是,但如果用户和密码的更改很少,则更长的超时可能适合您。默认的 300 秒(5 分钟)既谨慎又充足,以保持后端(例如 dbd(SQL 数据库查询))的负载。
这不应该与 session timeout 混淆,后者是一个完全独立的问题。但是,您可能希望检查 session-management 软件是否可以“意外”扩展 session,并在设置超时时牢记这一点。