跨境独立站图片防盗链海外CDN:跨境独立站图片防盗链与海外
自己做跨境独立站,辛辛苦苦拍的图片被别家网站直接引用,不仅消耗带宽还影响加载速度。
图片防盗链配合海外CDN是一套有效方案,下面按零基础能直接跟做的节奏来说。
动手前需要准备什么
- 一台已安装 Nginx 的服务器(如果你用 Apache 思路类似,只是配置语法不同)。
- 你的独立站已经绑定域名并启用了海外 CDN(本文以 Cloudflare 为例)。
- 图片资源存放在服务器某个目录下,比如
/var/www/html/wp-content/uploads/。
第一步:服务器端配置图片防盗链
大多数内容管理系统(如 WordPress)的防盗链插件效果有限,最可靠的是直接在 Nginx 里控制。
- 通过 SSH 登录服务器,找到当前站点配置文件。通常宝塔路径是
/www/server/panel/vhost/nginx/你的域名.conf,手动安装的话一般在/etc/nginx/conf.d/下。 - 在
server块内(或对应 location 块)添加以下规则:
location ~ \.(gif|jpg|jpeg|png|webp|bmp)$ {
valid_referers none blocked yourdomain.com *.yourdomain.com;
if ($invalid_referer) {
return 403;
}
}
解释一下:
valid_referers定义允许的来源,这里包含了直接访问(none)、带 referer 但被屏蔽的情况(blocked),以及你自己的域名和子域名。if ($invalid_referer)判断请求来源不在白名单内,直接返回 403 状态码。
- 检查配置是否有语法错误:
nginx -t
- 重新加载 Nginx 让配置生效:
nginx -s reload
第二步:海外CDN侧开启防盗链
服务器端配置只能挡住直接请求,但很多 CDN 会缓存图片,来源变成 CDN 节点,所以必须在 CDN 侧也做防盗链。
以 Cloudflare 为例:
- 登录 Cloudflare 控制台,选择你的域名。
- 进入 Security → Bot Fight Mode 或 Scrape Shield(位置可能随版本变化)。
- 打开 Hotlink Protection(热链接保护)。
- 根据需要勾选允许跳过保护的来源,通常填写你的网站域名(如
yourdomain.com)即可,不需要再填none或blocked。
如果你用其他 CDN,类似功能一般叫“防盗链”“Referer 黑白名单”或“Hotlink protection”。
避坑提醒
- CDN 未同步服务器规则:只配一边是没用的。客户请求先到 CDN,CDN 放行了才会回源到服务器,服务器再判断来源时来源已经是 CDN 节点了,服务器端规则基本失效。所以必须两端都配,且 CDN 端要放行你自己的域名。
- 白名单里包含 CDN 回源 IP:这不是必须的,但有的 CDN 会通过特殊 IP 回源,如果你发现正常用户图片也被拦截,可以在
valid_referers里加上cdn.yourcdnprovider.com或 CDN 的回源 IP 段。 - 移动端或部分浏览器无 referer:
none选项已经处理了不带 referer 的请求(直接访问、收藏夹打开等),但如果你希望所有直接访问也允许,保留none;如果希望严格一点只允许站内引用,可以去掉none。 - 预览缓存效果:修改规则后 CDN 可能有缓存,建议在 Cloudflare 的 Caching → Purge Everything 清除所有缓存再测试。
如何验证配置是否生效
验证分为两步:
- 本地直接访问:在浏览器打开你那独立站的图片链接,应该能正常显示。
- 模拟盗链:打开开发者工具(F12),在 Console 里执行:
fetch('https://你的域名/图片路径.jpg', {
headers: { 'Referer': 'https://evil.com/' }
}).then(res => console.log(res.status));
如果返回 403,说明服务器端防盗链生效。
- CDN 侧验证:如果上一步也返回 403,但把 Referer 改成你的域名时能正常返回 200,就表明两端配置正确。
常见问题解答
Q:配置后自己网站图片不显示了?
检查 CDN 侧 Hotlink Protection 的白名单是否包含了你的域名;再检查服务器端 valid_referers 是否写错域名或漏了子域名。
Q:用了 Cloudflare 后 curl 测试一直 403?
Cloudflare 的防爬虫机制可能会误判,可以暂时关闭 Bot Fight Mode 再测试,确认防盗链规则本身没有问题。
Q:图片被缓存后,修改规则需要清缓存吗?
是的,建议每次修改服务器或 CDN 规则后,清一次 CDN 缓存,避免缓存的旧规则影响测试。
如果你正在处理跨境独立站图片防盗链与海外 CDN 的整合,建议先按本文配好服务器端 Nginx 规则,再开启 CDN 端的保护,最后按验证步骤检查一遍。
遇到异常时优先回看避坑部分,基本都能解决。