离线内网静态资源防盗链核心是防错用,需严格白名单(显式域名、none、blocked)、绑定真实客户端ip、限定路径(^~+alias)、高敏资源启用secure_link签名。

离线内网环境下的静态资源库防盗链,核心不是防“外人”,而是防“错用”——确保只有指定系统、指定路径、指定来源能访问关键资源,杜绝跨系统误引、测试环境污染或配置扩散风险。重点在于白名单必须精准、可信、不可绕过。
只允许真实内网域名和明确路径来源
valid_referers 白名单不能依赖公网习惯写法,要严格匹配内网实际访问场景:
- 必须显式列出所有合法前端域名,如 portal.intra、oa.intra、report.intra;不写 *.intra,避免子域失控
- 加上 none:允许运维人员直接粘贴 URL 查看资源、脚本定时拉取、监控探针主动探测
- 加上 blocked:覆盖内网代理(如 Squid)、堡垒机跳转、某些国产浏览器插件清空 Referer 的情况
- 禁用正则(如 ~\.intra$):离线环境无 DNS 解析、无外部更新机制,正则易误配且难审计
绑定真实客户端 IP 白名单,拒绝一切代理干扰
内网中 Referer 可伪造,但真实源 IP 是唯一可信依据。必须关闭所有代理干扰,强制校验物理终端地址:
- 在 http {} 块顶部配置真实 IP 还原:
set_real_ip_from 10.10.0.0/16;
real_ip_header X-Real-IP;
real_ip_recursive off;(禁用递归,只认一级上游) - 在静态资源 location 中叠加 IP 控制:
allow 10.10.20.0/24;(研发网段)
allow 10.10.30.0/24;(生产前端网段)
deny all; - 不使用 allow 127.0.0.1 或 localhost:离线内网无本地调试需求,该条反而可能被容器或宿主机滥用
限定资源路径,禁止泛匹配与动态回源
专用静态资源库通常路径固定、结构清晰,必须用最严格的 location 匹配方式:
- 用 ^~ 前缀替代正则,杜绝运行时开销与歧义:
location ^~ /static/lib/、location ^~ /assets/icons/ - 每个 location 必须含 alias(非 root),指向唯一绝对路径,例如:
alias /opt/reslib/static/lib/; —— 避免路径拼接错误导致越权读取 - 禁止出现 proxy_pass、try_files、index 等动态行为,确保所有响应均为本地文件服务
高敏资源启用 secure_link 强签名,杜绝直链分发
对密钥文件、配置模板、内部 SDK 包等不可公开资源,Referer + IP 仍不够:
- 启用 secure_link 模块(主流离线镜像已内置),URL 格式为:
/static/secrets/db.conf?md5=abc123&expires=1724227200 - 生成逻辑需与内网签发系统一致:
secure_link_md5 "SECRET_KEY$uri$arg_expires"; - 校验失败统一返回 403,不暴露是否存在该文件,也不提供任何重定向或提示图











