高并发图片服务器应采用轻量防盗链策略:仅对/img/等资源路径用正则或前缀匹配图片后缀,启用精简valid_referers白名单(含none/blocked),禁用rewrite跳转、日志记录及第三方模块,优先CDN或对象存储层校验Referer。

为高并发图片服务器定制低损耗的轻量防盗链策略,核心是:不依赖复杂逻辑、不引入额外模块、不增加请求路径开销,同时守住 Referer 校验这一最有效且原生支持的防线。Nginx 的 ngx_http_referer_module 在解析请求头时开销极小,只要配置得当,每秒数万请求下 CPU 占用几乎不可见。
只对静态资源路径做精准拦截
避免在 http 或 server 块全局启用防盗链,而是聚焦于真实被盗风险高的资源路径。例如图片、缩略图、水印图等集中存放在 /img/、/upload/ 或带明确后缀的 location 中:
- 用正则匹配常见图片后缀(
jpg|jpeg|png|webp|gif|svg),不加mp4或pdf等非高频盗链类型,减少正则扫描负担 - 若图片全部走统一前缀(如
/p/),直接写location ^~ /p/ { ... },比正则更高效 - 避免嵌套
if+rewrite,优先用return 403,响应快、无重定向开销
Referer 白名单精简且语义明确
valid_referers 指令本身无性能瓶颈,但列表冗余会略微拖慢匹配速度。高并发场景下应保持白名单最小化:
- 只写业务必需的域名,如
*.example.com和example.com,不加测试域名、管理后台或已下线子域 - 保留
none(允许直接访问,如微信内嵌页、部分 APP)和blocked(防浏览器主动屏蔽 Referer 导致误杀),这两项是零成本兜底 - 不使用
server_names动态取值——它需每次查 server_name 列表,微小但可避免的开销
规避常见低效操作
很多“看似增强安全”的做法,在高并发下反而成为性能隐患:
- 不用
rewrite跳转到提示页:302 重定向多一次 TCP 往返,还可能触发客户端重试,放大流量 - 不配合日志记录非法请求:
log_not_found off应全局开启,盗链 403 日志默认记入 error_log,高频盗链会刷爆磁盘 I/O - 不启用第三方模块(如 accesskey):虽更安全,但每次请求需做 MD5 计算+字符串拼接,QPS 过万时可观测到 CPU 上升
- 不把防盗链和限流混在一个 location:分开配置,让 limit_req 只作用于入口,防盗链专注资源层,职责清晰也利于排障
配合 CDN 或对象存储做分层防护
真正扛住海量盗链的不是 Nginx 单点,而是前置分流:
- 将图片域名 CNAME 到 CDN(如 Cloudflare、阿里云 DCDN),由 CDN 层完成 Referer 校验,Nginx 只处理回源请求,大幅降低压力
- 若用 OSS/COS,直接开启平台级防盗链(如阿里云 Referer 黑白名单),并关闭回源 Referer 校验,Nginx 仅作透传代理
- 对高频盗链 IP,用 CDN 的 WAF 或 Nginx 的
geo+map快速封禁,比防盗链更前置、更省资源











