nginx静态资源服务默认无访问授权,需手动配置鉴权机制:ip白名单(allow/deny)、http basic auth(auth_basic+htpasswd)、或auth_request对接动态认证服务,并注意文件系统权限与路径一致性。

静态资源服务本身默认不带访问授权,Nginx 不会自动校验用户身份。要实现“访问授权”,需手动引入鉴权机制,常见方式包括 IP 白名单、HTTP Basic Auth、JWT 校验(需配合 Lua 或 OpenResty)、或反向代理前置认证服务。下面分场景说明实用配置方法。
IP 限制:只允许指定来源访问
适用于内网服务、管理后台静态资源等场景。在 location 块中使用 allow/deny 指令:
- 只允许可信内网段(如 192.168.1.0/24)访问
/admin-static/ - 拒绝其他所有请求,最后用
deny all收尾
示例配置:
location /admin-static/ {
alias /var/www/admin-assets/;
allow 192.168.1.0/24;
deny all;
}
HTTP Basic Auth:简单密码保护
适合临时分享、测试环境或低敏感静态资源。需生成密码文件(如用 htpasswd),再启用 auth_basic:
- 安装
apache2-utils(Ubuntu/Debian)或httpd-tools(CentOS/RHEL) - 执行
sudo htpasswd -c /etc/nginx/.htpasswd admin创建用户 - 配置中引用该文件,并设置提示文字
示例配置:
location /private/ {
alias /var/www/private-docs/;
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
结合 auth_request 实现动态鉴权
当已有统一认证服务(如 OAuth2 接口返回 200 表示合法)时,可用 auth_request 指令做透传校验:
- 定义一个内部 location,指向你的鉴权接口(如
/auth-check) - 在目标静态资源 location 中调用它,失败则返回 401 或自定义错误页
- 注意:该接口必须返回 200 才放行,且响应体可为空
示例配置:
location = /auth-check {
internal;
proxy_pass https://auth-api.example.com/validate;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
location /secure-static/ {
alias /var/www/secure/;
auth_request /auth-check;
auth_request_set $auth_status $upstream_status;
error_page 401 = @error401;
}
location @error401 {
return 401 "Unauthorized";
}
注意事项与权限衔接
授权只是第一道关卡,底层文件系统权限仍需匹配:
- Nginx 工作进程(如
www-data)必须对静态目录有读取权限 - 若用了
alias,路径末尾斜杠必须一致(alias /path/;vsalias /path;行为不同) - Basic Auth 密码文件需确保 Nginx 进程可读(如
chmod 640 /etc/nginx/.htpasswd) - 避免在公开 location 中暴露
.htpasswd或敏感目录(可用location ~ /\. { deny all; }屏蔽)











