Apache的AuthType Digest虽比Basic更安全,但因HTTP/2下被浏览器忽略、需严格匹配AuthDigestDomain、realm名与密码文件完全一致等限制,现代环境已不推荐作为主力认证方案。
Apache 的 AuthType Digest 确实能比 Basic 认证避免明文传密码,但它在现代环境中已严重受限,不推荐作为主力认证方案。核心问题不是配置不会,而是浏览器(Chrome/Firefox/Safari)在 HTTP/2 下会直接忽略 WWW-Authenticate: Digest 响应头——这是 RFC 7540 的强制行为,不是 bug。若你坚持使用,必须满足几个硬性前提并严格规避常见陷阱。
Digest 认证必须搭配 HTTPS,否则中间人可截获 nonce 并重放请求;同时它无法在 HTTP/2 下工作。验证方式:用 curl -v https://yoursite.com/protected 查看响应首行是否为 HTTP/1.1 401。如看到 HTTP/2 401,需临时在虚拟主机中加:
Protocols http/1.1(仅测试用,生产禁用)mod_ssl
这是 401 循环、反复弹窗的最常见原因。浏览器只在请求 URL 路径前缀与 AuthDigestDomain 完全一致时才复用 nonce。例如:
https://admin.example.com/settings/ → AuthDigestDomain 必须写 https://admin.example.com/ 或 /settings/(末尾斜杠不可少)/、example.com 或 https://admin.example.com(缺末尾斜杠)<Location "/admin/"> 块内配独立 AuthDigestDomain "/admin/"
摘要认证依赖 username:realm:password 的 MD5 哈希值,任何字符差异都会导致失败:
htdigest -c /etc/apache2/.htdigest "Restricted Area" username
AuthName "Restricted Area" 字符串必须与上一步引号内内容完全相同(空格、大小写、标点均不可变).htdigest 文件每行格式为:username:Restricted Area:9e00a05b2f94d34c7c9a0e1b2d3c4e5f
以下是最小可行配置(放在 <Directory> 或 <Location> 块内):
AuthType DigestAuthName "Restricted Area"(必须和 htdigest 命令中的一致)AuthDigestProvider fileAuthUserFile /etc/apache2/.htdigestAuthDigestDomain /private/(按实际路径调整,结尾斜杠必有)AuthDigestNonceLifetime 300(限制 nonce 有效期为 5 分钟)AuthDigestQop auth(禁用 auth-int,提升兼容性)Require valid-user注意:mod_auth_digest 模块需已启用(Debian/Ubuntu 执行 a2enmod auth_digest),且 Apache 2.4+ 默认编译进核心,但可能被注释掉。