Apache .htaccess密码认证需先启用AllowOverride AuthConfig,再配置AuthType Basic、AuthName、AuthUserFile绝对路径及Require指令;密码文件用htpasswd生成并置于Web不可访问路径,且必须配合HTTPS使用。

Apache 的 .htaccess 密码认证是一种轻量、灵活的目录级访问控制方式,适合共享主机或无主配置修改权限的场景。它不依赖数据库,用纯文本密码文件实现 Basic 认证,部署快、见效快,但需注意加密方式与权限安全。
确认服务器支持并启用 AuthConfig
Apache 默认禁用 .htaccess 中的认证指令。必须确保对应目录的 AllowOverride 设置允许认证相关配置:
- 编辑主配置(如
/etc/httpd/conf/httpd.conf或虚拟主机配置),找到目标目录的<Directory>块 - 将
AllowOverride None改为AllowOverride AuthConfig(仅启用认证指令)或AllowOverride All(全开,不推荐) - 保存后重启 Apache:
systemctl restart httpd(CentOS/RHEL)或sudo service apache2 restart(Debian/Ubuntu)
创建 .htaccess 文件并写入认证规则
在需要保护的网站子目录(如 /var/www/html/private)中新建 .htaccess 文件,内容如下:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
AuthName "请输入管理员凭据" AuthType Basic AuthUserFile /var/www/html/private/.htpasswd Require valid-user
-
AuthName是弹窗中显示的提示文字,可任意填写(避免含敏感词) -
AuthType Basic表示使用 HTTP Basic 认证(明文传输密码,务必配合 HTTPS 使用) -
AuthUserFile必须是绝对路径,指向后续生成的密码文件;建议放在 Web 根目录外或不可被直接访问的路径(如/etc/apache2/auth/.htpasswd) -
Require valid-user表示所有在.htpasswd中的用户均可访问;也可限定为Require user alice bob或Require group admins(需配合AuthGroupFile)
生成和管理 .htpasswd 密码文件
使用 Apache 自带的 htpasswd 工具创建和维护密码文件:
- 首次创建用户及文件:
htpasswd -c /var/www/html/private/.htpasswd admin(-c表示新建,会覆盖已有文件) - 追加新用户(不覆盖):
htpasswd /var/www/html/private/.htpasswd devuser - 更新某用户密码:
htpasswd /var/www/html/private/.htpasswd admin(直接回车后输入新密码) - 删除用户:
htpasswd -D /var/www/html/private/.htpasswd olduser - 加密方式说明:默认使用 bcrypt(Apache 2.4.8+),兼容性好;如需指定,可用
-B(bcrypt)、-m(MD5)、-s(SHA)、-d(CRYPT/DES)
注意:.htpasswd 文件权限建议设为 644(所有者读写,组/其他只读),且确保 Apache 进程有读取权限;若放于 Web 可访问路径,需确认服务器已禁止 .ht 开头文件的外部访问(Apache 默认行为)。
验证与安全提醒
完成配置后,访问该目录 URL(如 https://yoursite.com/private/),浏览器应弹出标准认证窗口。输入正确用户名密码即可进入。
- 务必启用 HTTPS:Basic 认证密码以 Base64 编码明文传输,未加密即等同泄露
- 避免将
.htpasswd放在 Web 根目录下(如/var/www/html/),防止被意外下载;推荐置于/etc/、/usr/local/etc/等非 Web 路径 - 不要在生产环境长期使用单用户或弱密码;定期轮换,必要时结合 IP 白名单或速率限制增强防护
- 若发现 500 错误,检查
.htaccess语法、AuthUserFile路径是否可读、Apache 是否加载mod_auth_basic和mod_authn_file

















