nginx日志中的防盗链策略有哪些

778
2025/3/15 12:31:51
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在Nginx中,可以通过配置防盗链策略来防止未经授权的第三方或域名访问网站的静态资源,如图片、视频等。以下是一些常见的Nginx防盗链策略:

基本概念

  • 盗链:指在一个网页内,以链接的形式嵌入另一个网页的内容,从而获取他人的资源而不经过授权。
  • 防盗链:通过配置Referer来防止其他非法网站或用户盗用云存储服务资源。
  • Referer:HTTP请求头部中的一个字段,包含了请求的来源页面的URL。

防盗链策略

  1. 使用valid_referers指令

    • 允许特定的域名、通配符或禁用Referer检查。
    • 示例配置:
      location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
          valid_referers none blocked yourdomain.com *.yourdomain.com;
          if ($invalid_referer) {
              return 403;
          }
      }
      
  2. 使用if指令结合$http_referer变量

    • 检查请求的Referer头是否在允许的列表中。
    • 示例配置:
      location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
          if ($http_referer !~ ^https?://(www\.)?yourdomain\.com/) {
              return 403;
          }
      }
      
  3. 使用Lua脚本

    • 利用Lua模块进行更灵活的防盗链策略。
    • 示例配置:
      location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
          content_by_lua_block {
              local valid_referers = { "https?://www.yourdomain.com$", "https?://yourdomain.com$" }
              local referer = ngx.var.http_referer
              if not valid_referers[referer] then
                  ngx.exit(403)
              end
          }
      }
      
  4. 使用签名方式

    • 通过生成签名来验证请求的合法性。
    • 示例配置:
      location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
          access_by_lua_block {
              local secret_key = "your_secret_key"
              local signature = ngx.md5(ngx.var.arg_key .. ngx.var.arg_signature)
              if signature ~= ngx.var.arg_signature then
                  ngx.exit(403)
              end
          }
      }
      

日志记录

在配置防盗链策略时,可以通过Nginx的日志格式化功能记录相关信息,以便于监控和审计。例如:

log_format main '$remote_addr - $remote_user [$time_local] '
                 '"$request" $status $body_bytes_sent '
                 '"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

通过上述配置,可以有效地防止未经授权的访问,保护网站资源的安全。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: linux底层架构从哪里开始学