一 前言
很多时候站长朋友希望自己网站的图片不被盗用,针对设置图片资源的热链接保护,也就是只允许特定的域名来引用他们服务器上的图片,防止其他网站直接链接到他们的图片,造成带宽盗用。
主要考虑:
1 Nginx的相关配置模块。
Nginx中有一个模块叫做ngx_http_referer_module,可以用来检查请求的Referer头信息,从而判断是否允许访问。不过,Referer头有时候可能被伪造,所以这并不是绝对的安全措施,但可以阻止大部分普通的盗链行为。
2 配置的是valid_referers指令.
这个指令用于定义合法的引用域名。比如,允许自己的域名和空Referer(直接访问的情况)。同时,需要设置当Referer不合法时返回的响应,比如403禁止访问,或者重定向到一个默认的图片。
3 需要考虑是否需要允许空Referer的情况。
例如,如果用户直接在浏览器中打开图片链接,或者某些合法的应用没有Referer头的情况,这时候可能需要设置valid_referers包含none。但这也可能带来安全风险,需要根据具体情况权衡。
4 举例说明配置的写法
例如在server或location块中添加相应的配置。比如,针对图片文件的后缀名(如.jpg、.png等)设置一个location,然后在其中使用valid_referers指令,并配置if语句来处理非法请求。
5 关于缓存的注意事项
或者使用secure_link模块来更安全地控制访问,但这可能比较复杂,一般只需要基本的Referer检查就够了。
6 针对Nginx给出具体的配置示例
解释每个参数的作用,比如valid_referers后面的server_names表示允许的域名,none表示允许没有Referer的请求,blocked表示允许没有完整Referer的情况(比如经过防火墙或代理的情况)。
7 修改配置后要重新加载Nginx
使用nginx -s reload命令。同时,测试配置是否正确,比如用不同的域名访问图片,看是否被阻止,或者直接访问是否允许。
8 补充一些高级配置,
比如结合地理位置或其他条件,或者使用HTTP头中的其他信息来增强防盗链措施。但基本的配置应该是用户所需要的。
二 配置教程
本节给出一个具体的Nginx配置示例,解释每一部分的作用,并提醒用户相关的注意事项,比如Referer的不可靠性和可能的例外情况处理。确保用户能够按照步骤正确配置,并理解其原理。在 Nginx 中配置允许特定域名调用图片资源(即防盗链设置),可以通过 valid_referers 指令实现。以下是具体配置步骤和代码示例:
1. 基础配置示例
server {
listen 80;
server_name your-domain.com;
location ~* \.(jpg|jpeg|png|gif|webp)$ { # 匹配图片文件扩展名
valid_referers none blocked server_names
*.your-domain.com
allowed-domain.com
*.allowed-subdomain.com; # 允许的域名列表
if ($invalid_referer) { # 如果 Referer 不在允许列表中
return 403; # 返回 403 禁止访问
# 或返回替代图片:rewrite ^ /placeholder.jpg;
}
# 其他配置(如缓存、过期时间等)
expires 30d;
access_log off;
}
}
2. 参数解释
- valid_referers :定义允许访问图片的 Referer 来源:
- none :允许没有 Referer 头的请求(直接访问或浏览器地址栏输入)。
- blocked :允许 Referer 被防火墙或代理删除的请求。
- server_names :允许本域名( server_name 定义的域名)。
- 自定义域名:如 *.your-domain.com (通配符匹配子域名)。
- if ($invalid_referer) :当请求的 Referer 不在允许列表中时触发动作:
- return 403 :直接返回 403 错误。
- rewrite ^ /placeholder.jpg :重定向到占位图片(需提前准备)。
3. 生效与测试
1)重载 Nginx 配置:
sudo nginx -s reload
2)测试方法:
- 直接访问图片 URL:应允许加载( none 参数生效)。
- 从允许的域名页面引用图片:应允许加载。
从未允许的域名引用图片:返回 403 或占位图。
4. 高级配置
允许空 Referer 和 HTTPS
valid_referers none blocked server_names *.your-domain.com https://allowed-domain.com; 结合地理位置限制location ~* \.(jpg|jpeg|png)$ { valid_referers server_names *.your-domain.com; if ($invalid_referer) { return 403; } # 仅允许中国 IP 访问 if ($geoip_country_code != CN) { return 403; } }
5. 注意事项
- Referer 的局限性: Referer 可能被篡改或缺失,如需更高安全性,可结合签名(如 secure_link 模块)。
- 缓存问题:建议在图片 URL 中添加随机参数(如 ?v=123 )绕过 CDN 或浏览器缓存测试。
评论 (0)