文档首页> 技术教程> 用 htpasswd 给目录加一层访问密码

用 htpasswd 给目录加一层访问密码

发布时间:2026-05-02 10:27        更新时间:2026-05-03 10:25
htpasswd 是生成密码文件的小工具,Nginx 直接认它产出的文件。给后台目录加一层 HTTP Basic 认证(浏览器弹框输账号密码的基础认证方式),五分钟配完,能挡掉绝大多数扫描器和陌生访客。 ## 一、生成密码文件 ``` htpasswd -c /etc/nginx/.htpasswd admin ``` -c 参数只在第一次创建文件时使用,之后添加用户不要带,否则会覆盖整个文件。生成的文件每行一条记录,格式是用户名加加密后的密码,cat 出来确认再进下一步。删除用户用 htpasswd -D 参数,改密码就重新执行同名命令覆盖。Ubuntu 上没有这条命令时先装工具包: ``` apt install -y apache2-utils ``` ## 二、Nginx 开启 auth_basic 对要保护的 location 加两行: ``` location /admin/ { auth_basic "Admin Area"; auth_basic_user_file /etc/nginx/.htpasswd; # 原有的 fastcgi、rewrite 配置保持不变 } ``` auth_basic 后面的提示文字随意写,会显示在弹框标题上,写个容易辨认的就行。nginx -t 检查语法无误后 nginx -s reload 生效。location 的匹配范围按需选:只保护后台入口就写精确路径;整站加认证对开放接口不友好,Basic 弹框在程序调用里没法输入。 ## 三、验证效果 浏览器打开 /admin/ 应弹出账号密码框,输入后正常进入。命令行验证: ``` curl -I http://example.com/admin/ # 期望 401 curl -I -u admin:密码 http://example.com/admin/ # 期望 200 ``` 两个返回码都对,说明认证链路正常。再挑一个没配认证的目录做对照访问,确认拦截范围没有扩大。 ## 四、权限与使用边界 密码文件 chmod 600,属主给 Nginx 运行用户,避免被网页后门读走。两点边界要清楚:Basic 认证的凭据只是编码传输,必须配合 HTTPS 使用;它只负责挡陌生人,挡不住拿到密码的人,后台自己的登录、验证码和权限体系照常要严。审计需求强的后台,这层只当外围,主体还是应用自身的账号体系。 常见报错:密码正确却一直弹框,多数是文件路径写错或 Nginx 用户没有读取权限,看 /var/log/nginx/error.log 里的 permission denied 一眼定位。改完配置不弹框、直接 403 的,检查 location 匹配是否误伤了静态资源路径。 这层密码的定位是"藏",配合强密码和 HTTPS,在扫描器面前就是一道足够高的门槛。