保护自己网站图片不被盗用,nginx 配置图片允许调用域名代码

保护自己网站图片不被盗用,nginx 配置图片允许调用域名代码

V+变量
2025-03-17 / 0 评论 / 22 阅读 / 正在检测是否收录...

一 前言

很多时候站长朋友希望自己网站的图片不被盗用,针对设置图片资源的热链接保护,也就是只允许特定的域名来引用他们服务器上的图片,防止其他网站直接链接到他们的图片,造成带宽盗用。
主要考虑:

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

评论 (0)

取消