Discuz附件防盗链设置,防止图片被盗用

当你的Discuz论坛图片被其他网站直接引用时,服务器流量会白白消耗,页面加载也会变慢。
防盗链的核心原理是检查HTTP请求头中的Referer字段,只允许来自你自己站点的请求访问附件。
通过配置Nginx或Apache的.htaccess规则,就能有效阻止大部分盗链行为。

准备工作:确认环境和附件路径

在动手之前,先确认你的服务器环境。
如果是宝塔面板,打开“网站”->“设置”->“配置文件”,就能看到Nginx配置。
Discuz的附件默认存放在data/attachment目录下,但如果你修改过存储位置,需要根据实际情况调整。

检查当前是否已有防盗链规则:

nginx -T | grep -i referer

如果没有任何输出,说明还没配置。
同时,确认你的站点域名,例如www.example.com,待会要加入白名单。

配置Nginx防盗链(推荐方式)

在Discuz站点的Nginx配置文件中,找到server块,在location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$之前或内部添加以下规则:

location ~* \.(gif|jpg|jpeg|png|bmp|webp)$ {
    valid_referers none blocked server_names *.example.com example.com;
    if ($invalid_referer) {
        return 403;
    }
    expires 30d;
    access_log off;
}

关键点说明:

  • valid_referers定义允许的来源:none表示直接访问(如浏览器输入图片地址),blocked表示Referer被防火墙隐藏,server_names表示本机域名,*.example.comexample.com替换为你的实际域名。
  • if ($invalid_referer) { return 403; }表示不合法来源返回403错误。
  • expires 30d设置浏览器缓存,减少重复请求。

保存后重载Nginx:

nginx -t && nginx -s reload

如果使用宝塔面板,可直接在“配置文件”中修改,然后点击“保存”并重载。

Apache环境下的.htaccess配置

如果你用的是Apache,在Discuz根目录的.htaccess文件中加入:

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

example.com换成你的域名。[F]表示返回403禁止访问。

避坑指南:常见错误和注意事项

  • 白名单遗漏子域名:如果论坛有多个子域名(如bbs.example.com),务必全部加入valid_referers,否则正常访问也会被拦截。
  • CDN或代理干扰:如果使用了CDN,请求的Referer可能被修改。建议在CDN端也配置Referer白名单,或暂时关闭CDN测试。
  • 测试时不要直接刷新:浏览器可能缓存了旧规则,用无痕窗口或curl命令验证。
  • 防盗链影响搜索引擎:百度、Google等搜索引擎的Referer通常是空的或被隐藏,noneblocked已覆盖,但建议观察收录情况,如有异常可临时放宽。
  • 不要用301跳转替代403:跳转到首页会浪费流量,直接返回403更高效。

验证防盗链是否生效

在本地终端执行以下命令,模拟从其他站点引用图片:

curl -I -e "http://www.other.com/" http://你的域名/data/attachment/forum/202501/01/test.jpg

如果返回HTTP/1.1 403 Forbidden,说明防盗链生效。
再测试正常访问:

curl -I -e "http://你的域名/" http://你的域名/data/attachment/forum/202501/01/test.jpg

应该返回200 OK

同时,用浏览器直接打开图片地址,应该能正常显示。

常见疑问

防盗链后,论坛会员上传的图片会受影响吗?

不会。
会员在论坛内浏览时,Referer是论坛自身域名,已在白名单中。
只有外部网站盗用才会被拦截。

为什么有的图片还是被盗用?

可能是对方使用了图片代理服务,或者你的白名单过于宽松(如允许了*)。
检查valid_referers是否误加了通配符。

开启防盗链后,百度图片搜索不显示缩略图?

百度图片搜索的Referer可能为空或被隐藏,已包含在none blocked中。
如果仍不显示,可临时将baidu.com加入白名单,但不建议长期开启。

如何只针对大尺寸图片防盗链?

可以结合文件大小或路径判断,但Nginx原生不支持直接判断文件大小。
建议对特定目录(如data/attachment/forum)单独配置防盗链。

按照以上步骤配置后,你的Discuz附件防盗链就能有效阻止大部分盗链行为,节省服务器流量。
如果遇到规则冲突,优先检查Nginx错误日志/var/log/nginx/error.log,根据报错调整白名单。

分享到:
上一篇
PageAdmin站点静态页面定时更新脚本
下一篇
Discuz帖子定时发布,预设内容自动上线
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意