一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx 防盗链中返回错误图片如何配

时间:2026-09-03 08:08:49 编辑:袖梨 来源:一聚教程网

Nginx防盗链需用valid_referers定义合法Referer,配合if判断$invalid_referer重定向至免检错误图;错误图location须绕过防盗链,配置root、expires及正确MIME类型,并建议记录盗链日志。

在 Nginx 中实现防盗链并返回自定义错误图片,核心是通过 valid_referers 指令识别合法来源,再用 if + rewritereturn 重定向到一张提示图。关键在于路径配置、MIME 类型支持和缓存控制,避免出现 403 后图片不显示或被再次盗用。

配置 valid_referers 白名单

先定义哪些 Referer 是允许访问静态资源(如 jpg/png)的。支持域名通配、正则匹配和空 Referer(直接访问或浏览器拖入地址栏):

  1. 允许本站域名及子域:`valid_referers server_names *.example.com;`
  2. 允许空 Referer(防止某些客户端不带 Referer):`valid_referers none;`
  3. 支持正则匹配多个站点:`valid_referers ~.google.com ~.baidu.com;`

拦截非法请求并重定向到错误图

对图片后缀做 location 匹配,用 if 判断 referer 不合法时,用 rewrite 302 跳转到一张内置提示图(推荐用 rewrite 而非 return,便于浏览器缓存该图):

  1. location ~* .(jpg|jpeg|png|gif|webp)$ {
  2. if ($invalid_referer) {
  3. rewrite ^/.*$ /img/forbidden.png redirect;
  4. }
  5. }

注意:$invalid_referer 是 valid_referers 设置后自动生效的内置变量,值为 1 表示非法。

确保错误图可被正常访问且不被防盗链拦截

上面跳转的 /img/forbidden.png 必须绕过防盗链规则,否则会循环返回 403 或空白。方法是在其 location 块中显式关闭 referer 检查:

  1. location = /img/forbidden.png {
  2. # 禁用防盗链检查
  3. valid_referers none blocked *.example.com;
  4. # 或更简单:直接允许所有
  5. # valid_referers *;
  6. # 静态文件服务
  7. root /usr/share/nginx/html;
  8. expires 7d;
  9. }

补充建议:提升体验与安全性

仅返回图片还不够,建议加几项优化:

  1. 给错误图配置合适的 MIME 类型,避免浏览器解析失败:Nginx 默认支持 png/jpg,若用 webp 需确认 include mime.types 已加载
  2. 添加 expires 指令缓存错误图,减少重复请求
  3. 日志中记录盗链行为:在 if 块内加 access_log /var/log/nginx/hotlink.log main;
  4. 避免使用 return 403 直接响应——用户看不到图;也慎用 return 302 /xxx,部分 CDN 或客户端可能不跟随重定向

热门栏目