Nginx 使用 htpasswd 生成 .htpasswd 密码文件以配合 auth_basic 实现 HTTP 基础认证;需安装 apache2-utils(Ubuntu/Debian)或 httpd-tools(CentOS/RHEL),用 htpasswd -c 创建文件、不加 -c 追加用户,推荐 bcrypt 加密(-B 参数),配置中指定绝对路径的 auth_basic_user_file 并确保权限安全(640)、HTTPS 传输及文件不可被 Web 直接访问。

在 Nginx 中使用 htpasswd 生成密码文件,是为了配合 auth_basic 指令实现 HTTP 基础认证。它本身不是 Nginx 自带的工具,而是 Apache HTTP Server 提供的实用程序,但可独立安装使用。
安装 htpasswd 工具
不同系统安装方式略有差异:
-
Ubuntu/Debian:运行
sudo apt install apache2-utils -
CentOS/RHEL/Rocky Linux:运行
sudo yum install httpd-tools或sudo dnf install httpd-tools -
macOS(用 Homebrew):运行
brew install httpd(会附带htpasswd)
生成密码文件(.htpasswd)
基本语法为:htpasswd -c /path/to/.htpasswd username。
其中 -c 表示「创建新文件」,首次使用必须加;后续添加用户时去掉 -c,避免覆盖已有用户。
- 创建新文件并添加用户
admin:htpasswd -c /etc/nginx/.htpasswd admin
执行后会提示输入并确认密码(输入不回显) - 追加用户
dev到已有文件:htpasswd /etc/nginx/.htpasswd dev - 使用 bcrypt 加密(更安全,推荐):
htpasswd -B -c /etc/nginx/.htpasswd admin
注意:Nginx 1.17+ 原生支持 bcrypt 散列($2y$格式),旧版本只支持 crypt、MD5($apr1$)或 SHA-1({SHA})
在 Nginx 配置中启用认证
编辑站点配置(如 /etc/nginx/sites-enabled/default 或对应 server 块),添加如下指令:
-
auth_basic "Restricted Area";—— 认证弹窗显示的提示文字 -
auth_basic_user_file /etc/nginx/.htpasswd;—— 指向你生成的密码文件,路径需确保 Nginx worker 进程有读取权限
保存后执行 sudo nginx -t && sudo systemctl reload nginx 生效。
验证与注意事项
访问配置了认证的路径时,浏览器应弹出登录框。输入正确用户名密码即可通过。
- 确保
.htpasswd文件**不在网站根目录下可被直接下载**(例如不要放在/var/www/html/内),建议放在/etc/nginx/等非 Web 可访问路径 - 检查文件权限,例如:
sudo chmod 640 /etc/nginx/.htpasswd,并确保nginx用户(通常是www-data或nginx)能读取 - 若遇到 500 错误或认证不生效,检查 Nginx 错误日志:
sudo tail -f /var/log/nginx/error.log


















