填写信息,生成代码

* 的是必填项,其余留空即用默认值

服务端类型

规则写在目录里的 .htaccess 中,改完立即生效,虚拟主机一般也能用。

Nginx 没有 .htaccess:片段必须写进 server 配置并 reload,虚拟主机通常给不了这个权限。

口令文件位置

(先填写绝对路径)

不知道路径怎么查?看获取方法

任选一种,把结果填到上面:

// 新建一个 php 文件放到站点根目录后访问它
echo __DIR__;
# SSH:在站点根目录执行
pwd

虚拟主机的控制面板一般也会在「站点信息 / 文档根目录」里直接写出来。

个别主机会屏蔽以点开头的文件,这时可以改成 htpasswd 之类的名字。

认证用户 用户名建议只用英文、数字和 . _ -

口令加密方式

10

高级选项 认证域名称、Apache 版本、IP 白名单、例外文件、401 页面

浏览器登录框里显示的那行字(AuthName)。按 RFC 7617 只有 ASCII 可靠,中文可能显示成乱码。

2.4 用 Require,2.2 用 Order / Allow / Satisfy,两套写法不通用。不确定就留 2.4。

这些来源直接放行,其余来源才要求输入口令。多个用空格或逗号分隔。

不需要认证的文件名。回调接口、健康检查页放这里,否则第三方会收到 401。

填了就只对这些文件要求认证,目录内其余文件照常访问;留空则保护整个目录。

点了「取消」时显示的内容。填路径的话,该页面必须在保护范围之外,否则会死循环。

贴进来后,原有用户会被保留,与上面重名的用户则用新口令替换。

Ctrl + Enter 也可以
校验工具 已有的摘要和口令对得上吗
加了之后没弹登录框,或者直接 500 了?
  • 500 且日志里有 AuthUserFile ... not allowed here:主配置里该目录的 AllowOverride 是 None,需要改成 AuthConfigAll。这条只能在主配置改,.htaccess 里改不了。
  • 500 且日志里有 Invalid command 'AuthType'mod_auth_basic / mod_authn_file 没加载。
  • 口令一直提示错误:先确认 AuthUserFile 写的是绝对路径,且 Apache 运行用户能读到这个文件;再用上面的「校验工具」确认摘要本身没问题。
  • Windows 版 Apache 上认不了 $6$ / $5$ / DES:这些依赖系统 crypt(),请改用 bcrypt 或 APR1-MD5。
Nginx 上改了配置却没生效?
  • 最常见:nginx -t 报错时 reload 会静默保留旧配置。一定要先看 nginx -t 的输出,再 reload。
  • 静态文件要密码、.php 不要:指令被放进了 location /,而 PHP 请求命中的是并列的 location ~ \.php$ —— auth_basic 只被 location 继承,不会跨到并列的 location。把它挪到 server 层即可。
  • 一直提示口令错误:在错误日志里找 open() "..." failed —— 说明口令文件路径不对或 worker 用户(www-data / nginx)读不到。路径确认无误后,再用上面的「校验工具」确认摘要本身没问题。
  • bcrypt 不认:Nginx 没有内置 bcrypt,是交给系统 crypt() 的。老系统缺 libxcrypt 就不支持 $2y$,改用 APR1-MD5 即可。
基本认证够安全吗?
账号口令是 Base64 编码后随每个请求发送的,等于明文。必须配合 HTTPS,否则同网络的人可以直接抓到。另外它没有失败次数限制、没有验证码,只适合挡住无关访客与爬虫,不能当正式的登录系统用。