Nginx可通过location块内配置auth_basic和auth_basic_user_file实现路径级HTTP Basic Auth访问控制,需先用htpasswd生成密码文件并设好权限,再在对应location中指定认证提示与文件路径,配合HTTPS、限流、IP限制等提升安全性。

在 Nginx 中,可以用 location 块配合 auth_basic 和 auth_basic_user_file 指令,对特定路径实现基于 HTTP Basic Auth 的访问控制。核心是把认证指令放在需要保护的 location 里,而不是写在 server 级别,避免全局生效。
1. 准备密码文件
Nginx 不直接管理用户密码,需用 htpasswd(Apache 工具)或兼容工具生成加密的用户名/密码文件:
- 安装
apache2-utils(Ubuntu/Debian)或httpd-tools(CentOS/RHEL) - 生成密码文件(如
/etc/nginx/.htpasswd):htpasswd -c /etc/nginx/.htpasswd admin(首次创建加-c)
后续添加用户去掉-c:htpasswd /etc/nginx/.htpasswd dev - 确保 Nginx 进程有读取该文件的权限(如
chown www-data:www-data /etc/nginx/.htpasswd)
2. 在 location 中启用 basic auth
只对特定路径(比如后台接口、管理页面)开启认证,其他路径保持开放:
location /admin/ {
auth_basic "Admin Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
说明:
-
auth_basic后的字符串会显示在浏览器弹窗中,作为提示信息 - 匹配规则按最长前缀匹配,
/admin/会匹配/admin、/admin/api、/admin/login.html等 - 若想精确匹配路径(如仅限
/admin),可用location = /admin
3. 注意 location 匹配优先级与嵌套逻辑
Basic auth 只作用于它所在的 location 块。如果多个 location 有重叠,要留意匹配顺序和继承关系:
- 不支持跨 location 继承认证配置;每个 location 需单独设置
- 若子路径需要不同权限,可嵌套定义:
location /api/ { ... }<br> location /api/v2/ {<br> auth_basic "API v2 Restricted";<br> auth_basic_user_file /etc/nginx/.htpasswd-v2;<br> } - 正则表达式 location(以
~或~*开头)优先级高于前缀匹配,但不能在其中使用auth_basic(Nginx 1.19.7+ 支持,旧版本会报错)
4. 配合其他限制增强安全性
Basic Auth 明文传输(依赖 HTTPS)、易被暴力破解,建议组合使用:
- 强制走 HTTPS:
return 301 https://$host$request_uri;在 HTTP server 中 - 限制请求频率防爆破:
limit_req zone=auth burst=3 nodelay;(需提前定义 limit_req_zone) - 限定 IP 访问(如仅允许内网):
allow 192.168.1.0/24;<br>deny all;
- 禁用敏感方法(如防止 PUT/DELETE):
if ($request_method !~ ^(GET|HEAD|POST)$) { return 405; }(慎用 if,推荐用limit_except)
不复杂但容易忽略细节:密码文件路径必须绝对且可读,location 范围要写准,HTTPS 是基本前提。配完记得 nginx -t && nginx -s reload 生效。


















