Nginx中auth_basic_user_file用于指定绝对路径的加密密码文件,需配合auth_basic指令启用Basic Auth,必须用htpasswd生成Apache格式凭据、设640权限、置于Web不可访问位置,并强制HTTPS以防Base64明文泄露。

在 Nginx 中,auth_basic_user_file 用于指定存储用户名和加密密码的文件路径,配合 auth_basic 指令实现 HTTP 基础认证(Basic Auth)。它本身不生成密码,只读取已按 Apache htpasswd 格式生成的密码文件。
1. 创建密码文件(必须用 htpasswd 工具)
Nginx 不自带密码生成工具,需依赖 htpasswd(通常随 Apache 发行版提供,或单独安装):
- Ubuntu/Debian:
sudo apt install apache2-utils - CentOS/RHEL:
sudo yum install httpd-tools或dnf install httpd-tools - macOS(Homebrew):
brew install httpd
生成密码文件示例:
- 新建文件并添加用户(如用户
admin):htpasswd -c /etc/nginx/.htpasswd admin(-c表示首次创建,会覆盖原文件) - 追加用户(不带
-c):htpasswd /etc/nginx/.htpasswd user2 - 使用 bcrypt 加密(更安全,Nginx 1.11.5+ 支持):
htpasswd -B -c /etc/nginx/.htpasswd admin
生成后的 .htpasswd 文件内容类似:admin:$apr1$zZ8...$X7v...(MD5)或admin:$2y$10$abc.../def...(bcrypt)
2. 在 Nginx 配置中启用 Basic Auth
在 server 或 location 块中配置:
location /private/ {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
注意:
-
auth_basic的值是弹窗显示的提示文字(可任意填写) -
auth_basic_user_file必须是绝对路径,且 Nginx 工作进程(通常是www-data或nginx用户)要有读取权限 - 建议将密码文件放在 Nginx 配置目录外(如
/etc/nginx/.htpasswd),避免被意外暴露
3. 权限与安全提醒
确保密码文件不被 Web 访问:
- 设置文件权限:
chmod 640 /etc/nginx/.htpasswd,属主为 root,属组为 nginx/www-data - 检查 Nginx 配置是否禁止访问该路径(默认不会,但需确认无类似
location ~ \.htpasswd的暴露规则) - Basic Auth 明文传输密码(即使 Base64 编码),务必搭配 HTTPS 使用,否则密码易被截获
4. 验证与调试
重载配置后测试:
-
sudo nginx -t检查语法 -
sudo systemctl reload nginx(或nginx -s reload) - 访问对应路径,应弹出登录框;错误凭据返回 401;正确则放行
- 查看错误日志(
/var/log/nginx/error.log)排查“no user/password was provided”或“user not found”等提示
不复杂但容易忽略细节:路径、权限、HTTPS、密码格式缺一不可。


















