可通过nginx的deny/allow指令结合location块精准限制ip访问静态资源目录;需用^~前缀匹配、配置root或alias指定路径,并在location内按序设置deny/allow规则且以allow all结尾。

可以通过 Nginx 的 deny 和 allow 指令,结合 location 块精准限制特定 IP 对静态资源目录(如 /static/、/assets/)的访问。
明确静态资源路径并配置 location 块
先用 location 匹配目标目录,推荐使用前缀匹配(location ^~ /static/)或精确匹配(location /static/),避免正则干扰性能。确保该 location 内不包含 proxy_pass,只处理本地文件(配合 root 或 alias)。
- 若站点根目录是
/var/www/html,且静态资源在/var/www/html/static/,可写:location ^~ /static/ { root /var/www/html; } - 若想把
/static/映射到独立路径(如/data/assets),用alias:location ^~ /static/ { alias /data/assets/; }(注意 alias 末尾斜杠)
在 location 内配置 IP 访问控制
在对应的 location 块中,使用 deny 和 allow 控制 IP。规则按顺序匹配,遇到第一条匹配即生效;必须以 allow all 收尾(否则默认全部拒绝)。
- 禁止单个 IP:
deny 192.168.1.100; - 禁止整个网段:
deny 192.168.1.0/24; - 允许指定 IP:
allow 203.0.113.5; - 放行所有其他合法请求:
allow all;
完整示例:
location ^~ /static/ {alias /var/www/assets/;
deny 192.168.5.20;
deny 203.0.113.0/28;
allow 203.0.113.42;
allow all;
}
验证配置并重载 Nginx
修改后务必检查语法,再平滑重载,避免服务中断:
- 测试配置:运行
nginx -t,提示 “syntax is ok” 且 “test is successful” 才安全 - 重载服务:执行
nginx -s reload(或systemctl reload nginx) - 验证效果:从被禁 IP 访问
https://yoursite.com/static/logo.png,应返回403 Forbidden;从允许 IP 访问应正常返回资源
补充建议:优先级与替代方案
注意 deny/allow 只在 HTTP 模块和 server/location 中生效,不支持 if 嵌套。若需更灵活策略(如按国家、User-Agent 或速率限制),可考虑:
- 用
geo指令预定义 IP 分组,再配合map控制变量 - 结合
limit_req防暴力刷静态资源 - 敏感资源建议移出 Web 可达路径,改由后端(如 FastAPI/Nginx internal)校验后输出











