• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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,并在设置超时时牢记这一点。

    上篇:mod_authn_file

    下篇:mod_authnz_fcgi