织梦图片防盗链如何设置

DedeCMS教程防盗链服务器配置

图片被盗链的影响

织梦DedeCMS站点通常会有大量图片资源,如果不做防盗链,其他网站可以直接引用你的图片URL,让图片在别人站点上显示,但流量和带宽消耗都在你的服务器上。图片被盗链会导致:服务器带宽被大量占用、网站访问变慢、流量成本飙升,严重时甚至拖垮服务器。设置图片防盗链,是保护服务器资源、维持站点正常访问的必要措施。

一、Nginx 防盗链配置

Nginx 通过检查请求头中的 Referer 字段判断请求来源,只允许来自本站的请求访问图片。在 server 配置块中加入:

location ~* \.(jpg|jpeg|png|gif|webp|svg|bmp|ico)$ {
    valid_referers none blocked server_names
        *.example.com example.com;
    if ($invalid_referer) {
        return 403;
        # 或重定向到防盗链提示图
        # rewrite ^/ https://www.example.com/nohotlink.jpg;
    }
}

参数说明

  • none:允许无Referer的请求(直接访问图片URL)。
  • blocked:允许Referer被防火墙删除的请求。
  • server_names:允许本站域名作为Referer。
  • *.example.com:允许的域名白名单,可加多个。
建议保留 none 和 blocked,因为部分浏览器隐私设置会删除Referer,过于严格会误伤正常用户。白名单中加入百度、必应等搜索引擎域名,避免搜索结果中图片无法预览。

二、Apache 防盗链配置

Apache 通过 .htaccess 文件配置防盗链,需要 mod_rewrite 模块支持。在网站根目录 .htaccess 中添加:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?example\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https://(www\.)?baidu\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https://(www\.)?bing\.com/ [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp|svg)$ - [F,NC]

逻辑:如果Referer不为空,且不是本站和搜索引擎域名,访问图片就返回403。如果想返回防盗链提示图,把 [F,NC] 改为跳转:

RewriteRule \.(jpg|jpeg|png|gif)$ /nohotlink.jpg [R=302,L,NC]

三、IIS 防盗链配置

IIS 通过 web.config 配置防盗链,需要安装 URL Rewrite 模块:

<system.webServer>
<rewrite>
<rules>
<rule name="防盗链" stopProcessing="true">
<match url=".*\.(jpg|jpeg|png|gif|webp)$" ignoreCase="true" />
<conditions>
<add input="{HTTP_REFERER}" pattern="^$" />
<add input="{HTTP_REFERER}" pattern="^https://(www\.)?example\.com/" negate="true" />
</conditions>
<action type="AbortRequest" />
</rule>
</rules>
</rewrite>
</system.webServer>

四、各方案对比

方案实现难度防护效果缺点
Referer校验中(能防常规盗链)Referer可伪造
URL签名高(难伪造)需改程序,图片URL变长
Token验证需后端配合
CDN防盗链依赖CDN服务商

五、CDN 层防盗链

如果站点使用了CDN(如阿里云CDN、腾讯云CDN、Cloudflare),直接在CDN控制台开启防盗链更高效,因为请求在CDN层就被拦截,不会回源到你的服务器。CDN防盗链通常支持:

  • Referer白名单/黑名单配置。
  • IP黑白名单。
  • URL签名鉴权(更安全,防伪造Referer)。
  • UA过滤。
CDN防盗链 + 服务器防盗链双保险效果最好。CDN拦截大部分盗链,服务器防盗链作为兜底,防止绕过CDN直接访问源站IP。

六、防盗链提示图设计

比起直接返回403,返回一张防盗链提示图更友好,还能起到品牌宣传作用。提示图设计要点:

  • 图片体积要小(10KB以内),避免占用带宽。
  • 内容提示「本图片仅限站内访问」,可加站点Logo。
  • 格式用jpg或png,避免用gif动画。
  • 放在不被防盗链规则拦截的目录,或单独放一个不受保护的图片。

注意提示图本身不能被防盗链规则拦截,否则盗链站显示的是403而非提示图。可以把提示图放在单独子域或加白名单。

注意事项与常见问题

  • 误伤RSS订阅: RSS阅读器抓取图片时Referer可能不符合白名单,需把主流阅读器域名加入白名单。
  • 影响图片搜索: 白名单务必包含百度、必应、谷歌等搜索引擎域名,否则图片搜索结果无法显示缩略图。
  • Referer可伪造: Referer校验只能防普通盗链,专业盗链者可伪造Referer绕过。高价值图片建议用URL签名。
  • https混合内容: 防盗链提示图如果是http,在https页面会报混合内容错误,确保提示图也用https。
  • 测试验证: 配置后用第三方工具模拟盗链访问,确认规则生效;同时测试本站正常访问不受影响。

防盗链的长期维护

防盗链配置上线后,建议定期查看服务器日志或CDN统计,分析被拦截的盗链请求来源,根据实际情况调整白名单和规则。如果发现带宽异常波动,及时排查是否有新的盗链源。对于原创图片资源密集的织梦站点,防盗链是保护内容资产和服务器成本的基础措施,配合图片水印、CDN加速,能形成完整的图片资源保护体系。把防盗链纳入服务器安全配置的常规项,长期执行,才能让站点资源不被无谓消耗。