不能直接用mod_socache_memcache存储认证会话,它仅提供通用key-value缓存能力,不处理认证状态生命周期或过期逻辑;必须与mod_authn_socache和mod_auth_basic配合使用,由前者实现缓存读写策略、后者执行实际认证。

不能直接用 mod_socache_memcache 存储认证会话。它只是 Apache 的通用共享缓存后端,不处理用户认证状态的生命周期、过期判断或数据结构封装——必须与 mod_authn_socache 配合使用,由后者负责读写逻辑和缓存策略。
必需模块与加载顺序
三个模块缺一不可:
-
mod_socache_memcache:提供 memcached 连接能力 -
mod_authn_socache:实现认证结果缓存逻辑(如 Basic Auth 验证后的用户信息) -
mod_auth_basic(或其他认证模块,如mod_auth_digest):提供基础认证协议支持
在 Debian/Ubuntu 上执行:sudo a2enmod socache_memcache authn_socache auth_basic
然后确认全部加载:apache2ctl -M | grep -E "(socache|authn|basic)"
Memcached 后端配置要点
在全局配置(如 /etc/apache2/mods-enabled/authn_socache.conf)中添加:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
CacheProvider memcache memcache://127.0.0.1:11211?timeout=3 AuthnCacheSOCache memcache AuthnCacheTimeout 300
-
memcache://中的timeout=3是连接超时(秒),不是缓存有效期 -
AuthnCacheTimeout 300才是认证结果在缓存中保留的最长时间(单位秒) - 确保 memcached 实例已启动,且 Apache 工作进程(如
www-data)能建立 TCP 连接(注意 SELinux 策略或防火墙拦截)
配合认证指令启用缓存
在虚拟主机或目录块中配置实际认证规则时,需显式启用缓存:
<Directory "/var/www/private">
AuthType Basic
AuthName "Restricted Area"
AuthBasicProvider file
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
<pre class="brush:php;toolbar:false;"># 启用 socache 缓存认证结果
AuthnCacheEnabled on
-
AuthnCacheEnabled on是关键开关,缺省为 off - 缓存 key 默认基于认证 realm + 用户名构造;若 realm 含空格或特殊字符(如中文、下划线),可能导致 key 生成失败,返回 400 错误;建议 realm 使用纯字母数字,例如
"admin-login" - 单次认证结果大小受限于 memcached 单 item 上限(默认 1MB),通常够用;如需更大空间,启动 memcached 时加参数
-I 2m
对比其他缓存方案的实际取舍
memcache 方案适合高并发、低延迟场景,但有明确局限:
- 无持久化:memcached 重启后所有认证缓存清空,用户需重新登录
- 无主从/集群容错:单点故障即全量失效;Redis 或数据库方案可支撑高可用
- 调试困难:
mod_socache_memcache不输出详细 debug 日志,出问题时建议先用telnet 127.0.0.1 11211手动测试连通性与基本 set/get - 不适用于敏感环境:若认证结果含令牌或临时密钥,memcached 默认无加密传输,建议搭配 TLS 或改用本地 shmcb


















