nginx 通过 ip 控制、http basic auth 和文件系统权限实现三层访问控制:ip 层用 allow/deny 分区域限制;账号层用 auth_basic 按路径分级认证;文件层以 nginx 进程用户权限确保资源隔离;三者叠加构成完整安全闭环。

Nginx 本身不内置用户账户系统,但可通过组合模块实现多级访问控制:基于 IP 的粗粒度管控、基于 HTTP Basic Auth 的账号级认证,以及配合文件系统权限的资源隔离。关键不在“用户管理”,而在“访问策略分层设计”。
按 IP 网段划分访问级别
适用于办公区、运维网、公网等逻辑区域隔离。使用 allow/deny 指令,注意顺序决定优先级:
- 同一 location 块中,指令从上到下匹配,最先匹配成功的规则立即生效,后续不再检查
- 只允许内网(192.168.10.0/24)和运维机(10.0.5.100)访问后台接口:
location /api/admin {
allow 192.168.10.0/24;
allow 10.0.5.100;
deny all;
}
若中间有代理(如 CDN 或负载均衡),$remote_addr 会变成代理 IP,此时需改用 $http_x_forwarded_for 并配合 geo 或 map 模块提取真实客户端 IP 再判断。
按账号密码区分访问角色
适合需登录验证的敏感路径(如 /dashboard、/config)。启用 ngx_http_auth_basic_module:
- 用
htpasswd创建密码文件(支持多用户,每行一个):
htpasswd -c /etc/nginx/.htpasswd admin htpasswd /etc/nginx/.htpasswd devops
- 在 location 中配置分级提示与不同密码文件(可选):
location /dashboard {
auth_basic "Admin Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
<p>location /logs {
auth_basic "DevOps Only";
auth_basic_user_file /etc/nginx/.htpasswd-devops;
}</p>
浏览器会弹出标准认证框,输入正确账号密码才放行;错误则返回 401。注意密码文件路径需被 nginx 进程读取(如属组设为 nginx,权限 640)。
按文件系统权限隔离资源可访问性
这是最底层、最可靠的控制方式,常被忽略但至关重要:
- Nginx 工作进程以配置中
user指令指定的用户身份运行(如user nginx;) - 确保该用户对
root或alias指向的目录有 执行(x)和读取(r)权限,否则直接 403 - 例如限制某目录仅运维组可读:
chown -R root:ops /var/www/internal/ chmod -R 750 /var/www/internal/ # nginx 用户需属于 ops 组,或单独授权
搭配 location 使用,既能防越权访问,也避免因权限不足导致的 403 错误。
组合策略实现多级权限模型
真实场景往往需要叠加控制。例如:内部员工可免密访问仪表盘,但修改操作需二次认证:
- 先用 IP 白名单放行内网请求
- 再对特定子路径(如
/dashboard/edit)强制 Basic Auth - 后端应用还可校验 token 或 session,Nginx 层只做前置守门人
这种分层设计让安全更灵活:IP 控制网络边界,账号控制身份边界,文件权限控制数据边界——三者互不替代,共同构成访问控制闭环。











