可为不同 location 配置完全独立的账号体系:每个 location 指向专属 .htpasswd 文件,用 ^~ 精确匹配并单独定义 auth_basic_user_file;文件统一存于 /etc/nginx/ 下、权限设为 640、属组 www-data;必须启用 https 以保障凭证安全。

可以为不同 location 配置完全独立的账号体系,核心是每个 location 指向不同的密码文件,并确保这些文件彼此隔离、权限可控。
1. 为每个 location 创建专属 .htpasswd 文件
用 htpasswd 工具为每个受保护路径生成独立的密码文件,避免混用:
-
sudo htpasswd -c /etc/nginx/.htpasswd_admin admin_user(首次创建 /admin/ 专用文件) -
sudo htpasswd -c /etc/nginx/.htpasswd_logs log_viewer(为 /logs/ 单独建文件) -
sudo htpasswd /etc/nginx/.htpasswd_admin second_admin(后续给 admin 组追加用户,去掉-c)
文件名建议带业务标识(如 _admin、_dev),路径统一放在 /etc/nginx/ 下,不放在网站根目录中。
2. 在各自 location 块中引用对应文件
每个 location 必须单独定义,且使用 ^~ 前缀保证前缀匹配优先级,防止被正则规则覆盖:
location ^~ /admin/ { auth_basic "Admin Area"; auth_basic_user_file /etc/nginx/.htpasswd_admin; }location ^~ /logs/ { auth_basic "Log Viewer"; auth_basic_user_file /etc/nginx/.htpasswd_logs; }location ^~ /config/ { auth_basic "Config Editor"; auth_basic_user_file /etc/nginx/.htpasswd_config; }
不要把多个 auth_basic_user_file 写进同一个 location;也不要让两个 location 共享一个密码文件,否则账号权限就无法分离。
3. 设置安全权限并验证配置
密码文件必须限制访问权限,仅允许 Nginx 主进程读取:
- 执行
sudo chown root:www-data /etc/nginx/.htpasswd_*(属组设为 Nginx 工作组) - 执行
sudo chmod 640 /etc/nginx/.htpasswd_*(禁止其他用户读写) - 运行
sudo nginx -t检查语法,确认无误后再sudo nginx -s reload
测试时分别访问 https://yoursite.com/admin/ 和 https://yoursite.com/logs/,应弹出不同提示文字,且账号不能跨路径登录成功。
4. 注意 HTTPS 强制要求
HTTP Basic Auth 的凭证以 Base64 编码明文传输,未启用 HTTPS 时等同于裸奔:
- 确保这些 location 所在的
server块监听 443 端口并配置了有效 SSL 证书 - 浏览器地址栏必须是
https://开头,否则现代浏览器可能直接屏蔽认证框或报错 - 不要在纯 HTTP 的 server 块中启用
auth_basic











