在 Nginx 中为目录开启 Basic Auth 需配置 auth_basic 和 auth_basic_user_file,并用 htpasswd 生成加密密码文件;在 location 块中指定路径、认证域和密码文件绝对路径;必须配合 HTTPS 使用,且确保密码文件权限安全、不可被 Web 访问。

要在 Nginx 中为某个目录开启 Basic Auth 身份认证,核心是配置 auth_basic 和 auth_basic_user_file 指令,并确保用户密码文件格式正确(使用 htpasswd 生成)。
1. 创建密码文件(含用户名和加密密码)
Nginx 不直接支持明文密码,需用 Apache 提供的 htpasswd 工具生成标准格式的密码文件(Apache htpasswd 格式,兼容 Nginx)。
- 安装 htpasswd(如未安装):
Ubuntu/Debian:sudo apt install apache2-utils
CentOS/RHEL:sudo yum install httpd-tools或dnf install httpd-tools - 生成密码文件(例如存为
/etc/nginx/.htpasswd):sudo htpasswd -c /etc/nginx/.htpasswd admin
系统会提示输入并确认密码。首次创建加-c;后续添加用户去掉-c,避免覆盖已有用户。 - 验证文件内容(应为
username:$apr1$xxx...或类似 bcrypt 格式):sudo cat /etc/nginx/.htpasswd
2. 在 Nginx 配置中启用 Basic Auth
在对应 server 或 location 块中添加认证配置。推荐在 location 块中精确控制目录范围。
- 示例:仅对
/admin/路径开启认证:
location ^~ /admin/ {<br> auth_basic "Restricted Area";<br> auth_basic_user_file /etc/nginx/.htpasswd;<br> } - 注意:
•^~表示前缀匹配且优先于正则匹配,适合目录路径;
• 认证域字符串(如"Restricted Area")会显示在浏览器登录弹窗中;
•auth_basic_user_file必须是绝对路径,且 Nginx worker 进程需有读取权限(建议chown root:www-data+chmod 640)。
3. 测试配置并重载 Nginx
避免因配置错误导致服务中断。
- 检查语法是否正确:
sudo nginx -t
输出 “test is successful” 表示无误。 - 重载配置(不中断服务):
sudo nginx -s reload - 访问
https://yoursite.com/admin/,浏览器应弹出登录框;输入正确用户名密码后才可进入。
4. 安全与维护提醒
Basic Auth 本身不加密传输(除非走 HTTPS),务必配合 TLS 使用。
- 禁止在 HTTP 明文环境下使用 Basic Auth —— 密码会被轻易截获;
- 定期更新密码、删除不用的账号;
- 不要将
.htpasswd放在 Web 可访问路径下(如/var/www/html/),防止被直接下载; - 如需更细粒度控制(如 IP 白名单+认证),可结合
allow/deny或auth_request模块实现。

















