应在location块中用deny/allow控制ip段访问静态资源目录,需精准路径匹配(^~)、规则从具体到宽泛、兜底allow all,并辅以autoindex off、屏蔽隐藏文件、限制http方法及禁用符号链接等加固措施。

直接在 location 块中用 deny 和 allow 控制 IP 段访问静态资源目录,关键在于路径匹配准确、规则顺序合理、兜底明确。
精准匹配静态资源目录路径
用前缀匹配(^~)定位目录,避免正则影响性能,同时确保能正确读取文件:
- 若静态资源实际存放在
/var/www/html/static/,且 URL 路径为/static/,写成:location ^~ /static/ { root /var/www/html; } - 若想把
/static/映射到独立路径(如/data/assets),用alias:location ^~ /static/ { alias /data/assets/; }(注意末尾斜杠) - 不建议在该 location 中使用
proxy_pass,否则请求不会走本地文件系统
按顺序配置 IP 段访问规则
规则从具体到宽泛逐条匹配,遇到第一个就终止,必须以 allow all 收尾,否则未显式允许的请求全部被拒:
- 先屏蔽指定网段,例如:
deny 203.0.113.0/28; - 再放行可信 IP 或网段,例如:
allow 192.168.2.0/24; - 最后加兜底:
allow all; - 完整示例:
location ^~ /static/ {<br> alias /var/www/assets/;<br> deny 192.168.5.0/24;<br> allow 10.10.0.0/16;<br> allow all;<br>}
加固静态资源基础防护
仅靠 IP 控制不够,还需防范常见风险:
- 关闭目录浏览:
autoindex off;,防止/static/列出所有文件 - 屏蔽隐藏文件:
location ~ /\. { deny all; },拦截.git/config等 - 限制 HTTP 方法:
limit_except GET HEAD { deny all; },禁止对静态资源发 POST/PUT - 禁用符号链接:
disable_symlinks on;(尤其配合alias使用),防路径穿越
验证与注意事项
改完配置不能直接 reload,必须验证再上线:
- 运行
nginx -t,确认提示 “syntax is ok” 和 “test is successful” - 执行
nginx -s reload或systemctl reload nginx - 从被禁 IP 段访问
/static/logo.png应返回 403;从允许 IP 访问应正常加载 - 若前端经过 CDN 或反向代理,
deny/allow默认只认remote_addr(即 CDN 节点 IP)。需配合set_real_ip_from+real_ip_header才能基于真实用户 IP 控制











