核心思路是按需分类管理静态资源:通过大小写不敏感正则匹配后缀,用 location 精准分离处理;优先级靠前放置,配合 root/alias、缓存头、日志精简、方法限制及安全防护。

核心思路不是“过滤掉”某些静态资源,而是按需分类管理:哪些该记录、哪些该拦截、哪些该缓存、哪些该拒绝访问。关键在 location 规则的优先级与语义精准性。
按文件后缀精准匹配并分离处理
用大小写不敏感正则匹配常见静态后缀,统一交由 Nginx 直接服务,并启用基础优化:
-
配置示例:
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2|ttf|eot|pdf|zip)$ - 搭配
root /opt/static;或alias /opt/static/;指向实际存放路径(注意 root 与 alias 路径拼接逻辑差异) - 添加
expires 1y;和add_header Cache-Control "public, immutable";提升缓存效率 - 避免该 location 被
location /或proxy_pass覆盖,建议放在 server 块靠前位置
排除非真实资源请求,减少日志干扰
robots.txt、favicon.ico、健康检查路径等虽带静态后缀,但不属于用户资源访问行为,应显式跳过记录:
location = /robots.txt { access_log off; log_not_found off; return 200 "User-agent: *\nDisallow: /\n"; }location = /favicon.ico { access_log off; log_not_found off; return 204; }- 对探针类路径如
/health或/ping,也建议用location =精确匹配并关闭日志
限制非必要 HTTP 方法,增强安全性
静态资源通常只响应 GET 和 HEAD 请求,禁用其他方法可降低攻击面:
- 在对应 location 块中加入:
if ($request_method !~ ^(GET|HEAD)$) { return 405; } - 不推荐在高并发主 location 中滥用 if,但针对静态资源路径使用是安全且有效的
- 配合
autoindex off;防止目录遍历泄露
按需启用日志分离与精简格式
高频访问的静态资源若混入主日志,会快速稀释有效信息并增加解析成本:
- 定义轻量日志格式:
log_format static '$remote_addr [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_time'; - 在静态 location 中指定:
access_log /var/log/nginx/static_access.log static; - 搭配 logrotate 按日切分、保留 30 天,避免磁盘占满











