mod_authn_socache通过共享内存缓存认证结果,可将高频认证耗时从5ms降至0.1ms以内;需按socache_shmcb→authn_socache→auth_basic顺序加载模块,并配置CacheProvider、AuthnCacheSOCache和AuthnCacheTimeout。
在虚拟主机中配置 mod_authn_socache,核心是让认证结果复用、避免每次请求都查数据库或调用 ldap/脚本。它不改变原有认证逻辑,只加一层共享内存缓存——高频访问下,单次认证耗时可从约 5ms 降到 0.1ms 以内。
模块加载顺序必须严格正确
Apache 启动时模块依赖不能错,否则缓存不生效甚至报错:
-
mod_socache_shmcb(底层共享内存实现)必须最先加载 -
mod_authn_socache(桥接层)其次加载 -
mod_auth_basic或mod_auth_digest(真正执行认证)最后加载
在 httpd.conf 或启用模块的配置文件中明确写成:
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so<br>LoadModule authn_socache_module modules/mod_authn_socache.so<br>LoadModule auth_basic_module modules/mod_auth_basic.so
Debian/Ubuntu 用户用 a2enmod 启用后,建议运行:httpd -M | grep -E "(socache|authn|basic)" 确认三者已加载且顺序无误。
全局缓存基础配置不可省略
仅加载模块没用,必须在主配置(如 httpd.conf 或 conf-available/ 下某配置)中设置两个关键指令:
-
CacheProvider shmcb:/var/cache/apache2/socache-shmcb(512000)
指定使用shmcb共享内存缓存,括号内为字节数(512KB 可存约 2000 个用户条目) -
AuthnCacheSOCache shmcb
告诉认证模块“用上面定义的那个缓存”,值必须与CacheProvider的别名一致 - 推荐加上:
AuthnCacheTimeout 300
缓存有效期(单位秒),默认 300(5 分钟)。可根据业务调整:API 密钥类可设 60,静态资源登录态可设 1800
在虚拟主机内启用缓存认证
缓存不是全局自动生效,需在具体 <VirtualHost> 或 <Directory> 块中显式开启:
- 把原
AuthBasicProvider file或ldap改为socache - 添加
AuthnCacheEnable cache - 保留原有
AuthType、AuthName、Require等配置不变
示例(放在 <VirtualHost> 内):
<Directory "/var/www/private"><br> AuthType Basic<br> AuthName "Restricted"<br> AuthBasicProvider socache<br> AuthnCacheEnable cache<br> Require valid-user<br></Directory>
验证是否生效
配置完成后重启 Apache,可通过以下方式确认:
- 查看日志是否有
socache相关提示(如缓存命中/未命中) - 用
ab或curl -v多次请求同一受保护路径,观察响应头中X-Authentication-Cache-Hit(需自定义日志格式或模块支持)或对比耗时变化 - 检查
/var/cache/apache2/下是否生成了socache-shmcb文件(大小应随访问增长)

















