Nginx设置图片防盗链的方法
作者:慧一居士
本文详细介绍了在Nginx中设置图片防盗链的方法,包括精准校验请求的Referer、自定义提示图片以及多ginx的高级防护措施,感兴趣的朋友跟随小编一起看看吧
在 Nginx 中设置图片防盗链,最常用且最可控的方式是通过 valid_referers 指令精准校验请求的 Referer 头。以下是具体的配置步骤与最佳实践:
1. 基础防盗链配置
建议通过正则表达式精准匹配图片后缀(如 .jpg、.png 等),避免对 HTML 或 API 接口等无需校验的请求进行误伤。
location ~* \.(jpg|jpeg|png|gif|webp)$ {
# 定义合法的 Referer 白名单
# none: 允许用户在浏览器地址栏直接输入 URL 访问
# blocked: 允许被隐私插件或代理服务器隐藏了 Referer 的请求
# server_names: 允许当前 server_name 配置的域名访问
# *.yourdomain.com: 允许所有子域名访问
valid_referers none blocked server_names *.yourdomain.com;
# 如果 Referer 不在白名单内,则返回 403 禁止访问
if ($invalid_referer) {
return 403;
}
}2. 进阶:自定义提示图片
如果你希望在拦截盗链时返回一张自定义的“禁止访问”提示图,而不是生硬的 403 错误,可以使用 rewrite 或 error_page 指令:
location ~* \.(jpg|jpeg|png|gif|webp)$ {
valid_referers none blocked server_names *.yourdomain.com;
if ($invalid_referer) {
# 方式一:使用 rewrite 重写到提示图(需加 break 避免循环)
rewrite ^(.*)$ /images/forbidden.png break;
# 方式二:使用 error_page(推荐,语义更清晰)
# error_page 403 =200 /images/forbidden.png;
# return 403;
}
}⚠️ 关键注意:确保提示图(如 /images/forbidden.png)本身不在上述防盗链的 location 规则内,否则会导致死循环匹配。
3. 多场景适配与例外处理
- 允许多个信任域名:如果有合作站点需要引用你的图片,直接在
valid_referers后追加信任域名即可,例如:valid_referers none blocked *.yourdomain.com *.partner.com;。 - 允许特定图片被公开引用:如果某张 Logo 需要允许任何网站引用,可以单独为其配置一个精确匹配的
location,并添加跨域头,使其绕过防盗链规则:
4. 配置验证与测试
修改配置后,务必先检查语法并平滑重启 Nginx:
# 检查配置语法 nginx -t # 平滑重启 nginx -s reload
测试方法:
- 直接访问:在浏览器地址栏直接输入图片 URL,若配置了
none则应正常显示。 - 模拟盗链:使用
curl命令模拟非法来源的请求,验证是否被成功拦截:
💡 补充建议
- 性能优化:建议配合
expires 7d;等缓存指令使用,减少重复的防盗链校验开销。 - HTTPS 站点适配:HTTPS 站点的
Referer字段有时默认不携带协议和端口,建议在白名单中使用正则同时兼容 http 和 https,例如:~^https?://(www\.)?yourdomain\.com。 - 高级防护:基于
Referer的防盗链容易被伪造。如果对安全性要求极高,建议编译启用 Nginx 的http_secure_link_module模块,通过签名链接和过期时间来防止专业盗链。
到此这篇关于Nginx如何设置图片防盗链的文章就介绍到这了,更多相关Nginx图片防盗链内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
