Nginx通过ngx_http_auth_basic_module为静态目录添加基础认证,核心是两步:使用htpasswd生成密码文件(如htpasswd -c /etc/nginx/passwd.db admin),并在location块中配置auth_basic和auth_basic_user_file指令启用认证,要求路径精确、权限合理、配置经nginx -t验证后reload生效。

用 ngx_http_auth_basic_module 给静态目录加访问控制,核心是两步:生成密码文件 + 在 location 块中启用基础认证。它不依赖外部服务,纯 Nginx 内置模块,轻量且可靠。
生成密码文件(使用 htpasswd)
该模块本身不管理用户密码,需借助 htpasswd 工具创建加密的用户凭据文件。系统通常随 Apache 安装,若未安装可单独获取:
-
CentOS/RHEL:
yum install -y httpd-tools -
Ubuntu/Debian:
apt install -y apache2-utils
常用命令示例:
- 新建用户文件并添加首个用户(
-c表示创建新文件):htpasswd -c /etc/nginx/passwd.db admin(执行后会提示输入密码) - 追加新用户(不加
-c,避免覆盖已有用户):htpasswd /etc/nginx/passwd.db devuser - 批量写入(
-b允许命令行直接指定密码,适合脚本):htpasswd -b -c /etc/nginx/passwd.db deploy pass123
在 Nginx 配置中启用 auth_basic
将认证指令放在要保护的 location 块内,而非全局或 server 级别,确保只对目标路径生效:
location /private/ {
alias /data/files/private/;
autoindex on;
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/passwd.db;
}
注意要点:
-
auth_basic的字符串是登录弹窗显示的提示文字,可自定义 -
auth_basic_user_file必须是绝对路径,且 Nginx worker 进程需有读取权限(建议属主为root:nginx,权限640) - 若用
root指令定位静态目录,此处用alias更安全,避免路径拼接错误
权限与安全加固配套建议
仅加密码不够,还需防止配置泄露和越权访问:
- 禁止通过 URL 访问密码文件本身:
location = /etc/nginx/passwd.db { deny all; } - 限制敏感文件类型(如 .git、.env):
location ~ /\. { deny all; } - 确保密码文件不在网站根目录下,推荐放在
/etc/nginx/或/usr/local/nginx/conf/等非 Web 可达路径 - Nginx 进程应以低权限用户(如
nginx)运行,避免user root;配置
验证与调试
配置完成后务必检查语法并重载:
-
nginx -t—— 确认无语法错误 -
nginx -s reload—— 平滑加载新配置 - 访问
/private/路径,浏览器应弹出认证框;输错凭据返回 401;正确则正常列出或下载文件 - 查看
/var/log/nginx/error.log,若提示open() "/etc/nginx/passwd.db" failed (13: Permission denied),说明文件权限或 SELinux 上下文有问题











