海洋CMS如何防盗链?图片/视频防盗链设置

juming
juming 正式会员超兽战士
发布于 2026-10-07 10:28 ·0 浏览 ·0 回复

海洋CMS 的图片/视频防盗链不在后台某个开关里完成,正确做法是在 Web 服务器(Nginx/Apache)或 CDN 上做 Referer(HTTP 请求头里的来源页面地址)白名单校验:只有来源是本站域名的请求才返回文件,其他来源一律返回 403。下面给出可直接粘贴的配置和踩坑点。

海洋CMS后台能直接设置防盗链吗?

结论:海洋CMS 本身不提供"一键防盗链"功能,防盗链要落到服务器层或 CDN 层来配。原因很简单——防盗链本质是 Web 服务器在返回静态文件前判断请求头里的 Referer 是否合法,这属于服务器职责,CMS 程序管不到每个静态文件的输出。

所以你要动的是两样东西之一:Nginx/Apache 的站点配置文件,或者你套在站前的 CDN(内容分发网络)控制台。海洋CMS 自己的附件(封面图、截图、自建视频切片)通常放在站点根目录下的 upload 或 uploads 目录,配置规则时直接针对这个目录即可,先 ls 一眼确认目录名,别照抄。

Nginx 下怎么给图片和视频加防盗链?

结论:在 server 块里加一段 location 匹配静态资源后缀,用 valid_referers 声明白名单,非法来源返回 403,一共 6 行。

location ~* \.(jpg|jpeg|png|gif|webp|mp4|m3u8|ts)$ {
    valid_referers none blocked server_names *.example.com example.com;
    if ($invalid_referer) {
        return 403;
    }
    expires 7d;
    add_header Cache-Control "public";
}

把 example.com 换成你的域名。三个关键字的含义:none 表示允许完全不带 Referer 的请求(浏览器地址栏直接输入图片地址就属于这种),blocked 表示允许 Referer 被防火墙或代理删空的请求,server_names 表示本站所有 server_name 自动放行。

只想管上传目录就改成 location ^~ /upload/ { ... },范围更小、误伤更少。改完执行 nginx -t 验证语法,再 nginx -s reload 生效。

Apache 的 .htaccess 防盗链规则怎么写?

结论:用 mod_rewrite 判断 Referer,不合法直接返回 403,把下面 4 行放进站点根目录的 .htaccess 即可。

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

!^$ 这一行是"允许空 Referer",删掉它就直接输入图片地址也会被拦,安全性更高但用户复制链接到新标签页打开会 403。[F] 是 forbidden,[NC] 表示忽略大小写。

加了防盗链后视频为什么播不了?

结论:90% 的情况是 m3u8 切片请求被误拦,或者白名单漏了播放所依赖的域名。

自建 m3u8 视频由播放器发请求,通常带着本站 Referer,正常不会被拦。但以下三种情况会出问题:一是用了第三方播放器或 APP 壳,Referer 为空或被抹掉,此时要保留 none 和 blocked;二是视频托管在另一个子域(比如 cdn.example.com),白名单里必须补上;三是资源站的采集外链图片——那些图根本不在你服务器上,防盗链规则管不着,也不该管。

排查方法:浏览器按 F12 打开开发者工具,看 Network 里 403 的请求,检查它的 Referer 头是什么,把这个值加进白名单。

套了 CDN 之后防盗链在哪配?

结论:CDN 会回源拿文件,服务器端只看得到 CDN 节点的请求,所以一旦上 CDN,防盗链应优先在 CDN 控制台配置。

阿里云 CDN 和腾讯云 CDN 都在"访问控制 / 防盗链"里提供 Referer 白名单,支持 *.example.com 通配符,并单独提供"是否允许空 Referer"开关。建议开启空 Referer 拦截,同时把 CDN 回源节点加入服务器白名单,避免 CDN 回源被自己的 Nginx 规则挡在门外。CDN 层配好后,服务器层的规则可以保留作为兜底。

防盗链设置要避开哪些坑?

结论:最大的坑是规则写太宽把正常用户拦掉,其次是缓存导致规则改了不生效。

三个实操建议:第一,正则后缀列表按你实际用到的格式写,不用的别加;第二,expires 缓存时间别设过长,图片 7 天合理,m3u8 索引文件建议不缓存或设 1 分钟以内,否则更新视频后用户看到的还是旧切片;第三,改完规则后清一次服务器和 CDN 缓存再测试,用 curl -e "http://other.com/" -I http://你的域名/upload/test.jpg 应该看到 403,用 curl -e "http://你的域名/" -I 同样的地址应该看到 200。

总结一下:海洋CMS 的防盗链重心在 Nginx/Apache 的 Referer 白名单和 CDN 控制台,不是后台选项;图片规则简单直接,视频重点盯 m3u8/ts 切片和跨子域白名单;配完必须用 curl 双向验证,别凭感觉。

版权声明:本文来自 GJ站长论坛《海洋CMS如何防盗链?图片/视频防盗链设置》
原文链接:https://www.gj0.com/thread-233.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~