防盗链Nginx规则保护产品原图防止盗用

## 为什么你的产品原图容易被盗 没有防盗链机制的网站,图片链接被他人直接嵌入页面后,每次访问都会消耗你的服务器流量。不仅增加带宽费用,还可能被竞争对手直接挪用产品图,影响品牌形象。Nginx的防盗链规则通过检查请求来源(Referer头),只有符合条件的请求才允许访问图片,是成本最低、见效最快的防护手段。 ## 开始前准备好这些 - 一台运行Nginx的服务器(Linux系统,已配置好网站) - 网站根目录下有产品图片文件夹(例如 /www/wwwroot/example.com/uploads/images/) - 知道自己的网站域名(例如 example.com) - 如果使用宝塔面板,确保已登录后台,进入对应网站的设置界面 ## 配置Nginx防盗链(命令行版) 找到网站对应的Nginx配置文件。通常位于 `/etc/nginx/sites-enabled/` 或 `/etc/nginx/conf.d/` 下,或宝塔中直接编辑。在 `server` 块内,图片文件处理的相关 `location` 中添加规则。 假设图片统一存放在 `/uploads/images/` 目录下,配置示例如下: ```nginx location ~* \.(jpg|jpeg|png|gif|webp)$ { valid_referers none blocked server_names ~\.example\.com ~\.your-other-domain\.com; if ($invalid_referer) { return 403; } } ``` **参数解释**: - `valid_referers` 定义合法的来源。`none` 表示允许直接输入URL或书签访问;`blocked` 允许无Referer头的合法请求(如部分浏览器隐私模式);`server_names` 允许本域名自身;后面的正则指定白名单域名。 - `$invalid_referer` 变量代表不匹配的来源,返回403禁止访问。 如果只想让本网站引用,并且拒绝所有外部来源(包括空Referer),可以移除 `none` 和 `blocked`: ```nginx location ~* \.(jpg|jpeg|png|gif|webp)$ { valid_referers server_names ~\.example\.com; if ($invalid_referer) { return 403; } } ``` 保存配置后执行 `nginx -t` 测试语法,无错误则 `systemctl reload nginx` 生效。 ## 宝塔面板用户看这里 宝塔面板提供图形化操作,无需手写配置文件: 1. 登录宝塔面板,进入「网站」→ 点击你的网站 →「设置」 2. 找到「防盗链」选项卡 3. 开启防盗链开关,状态选「允许白名单」 4. 在「白名单」输入框中填写允许的来源域名,每行一个。**包含你自己的域名**,例如 `example.com` 5. 「允许空referer」根据需求决定:如果希望用户直接访问图片链接不报错,建议开启;如果严格禁止外部引用,则关闭。建议开启,避免部分正常访问被阻断。 6. 「文件后缀」默认已包含常见图片格式,按需补充 7. 点击保存,宝塔会自动重载Nginx ## 最容易踩的三个坑 **坑一:允许空referer导致防盗链失效** 如果关闭了空referer,某些浏览器或搜索引擎爬虫访问图片时会因为无Referer头而被403拦截,导致图片不显示。建议保留 `none` 或宝塔中开启「允许空referer」。 **坑二:白名单域名写错格式** 使用正则时必须加 `~` 前缀,例如 `~\\.example\\.com`。如果直接写 `example.com`,Nginx会当作字符串精确匹配,不会匹配 `www.example.com` 或 `abc.example.com`。 **坑三:忘记添加CDN域名** 如果使用了CDN(如阿里云OSS、Cloudflare),需要将CDN节点域名加入白名单,否则CDN回源请求会被拦截,导致所有图片无法加载。 ## 验证防盗链是否生效 **命令行验证**(推荐): ```bash # 模拟正常引用(使用你自己的域名) curl -I -e "http://example.com/anypage" https://example.com/uploads/images/product.jpg ``` 返回 `200 OK` 表示允许。 ```bash # 模拟外部盗用 curl -I -e "http://www.other-site.com" https://example.com/uploads/images/product.jpg ``` 返回 `403 Forbidden` 表示防盗链生效。 **浏览器验证**:直接访问一张产品图片链接,应该能正常显示。新建一个HTML页面,使用 `` 放在另一个域名下(或本地hosts模拟)访问,如果图片显示为裂图或403,说明规则生效。 ## 高频问题解答 **Q:配置后图片在微信、QQ内无法显示怎么办?** A:微信等客户端内置浏览器可能不带Referer头,建议开启空referer白名单(宝塔中允许空referer,命令行中加入 `none`)。 **Q:多个域名都需要引用图片,白名单要逐一添加吗?** A:是的,每个允许引用的域名都要加入 `valid_referers` 或宝塔的白名单列表。如果域名有共同后缀,可用正则简写,例如 `~\\.example(\\.com|\\.net)?$`。 **Q:规则配置后部分图片仍可被外部直接访问?** A:检查 `location` 的正则是否完整覆盖图片格式,或查看 Nginx 错误日志分析请求来源。 ## 简单做个结尾总结 通过以上步骤,你已经可以快速启用Nginx防盗链规则保护产品原图。无论是命令行还是宝塔面板,核心都是控制来源referer。**记住要处理空referer和CDN场景**,避免误伤正常用户。配置完成后务必用浏览器和curl双重验证,确保安全与兼容性。 如果你在操作中遇到其他异常,优先检查 Nginx 日志(`/var/log/nginx/error.log`)和宝塔的防盗链状态,通常错误信息会告诉你具体哪个请求被拒绝。
分享到:
上一篇
数据库读写分离部署高并发外贸商城站点
下一篇
移动端加载慢专项优化外贸独立站实操:移动端加载慢专项优化
1
系统公告

机房迁移升级通知

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