Featured image of post Nginx屏蔽指定Referer的请求

Nginx屏蔽指定Referer的请求

公司有个站被人仿了,直接引用源站资源,因为在某些数据库需要被引用,所以白名单referer规则不太好设,只能暂时将仿站referer屏蔽。

  1. 使用nginx的map模块和正则匹配该域名和IP的请求,写成单独的conf文件block_referer.conf

    1
    2
    3
    4
    5
    
    map $http_referer $block_ref_urls {
        default 0;
        ~(?i)(^.*xxxx.com.*$) 1;
    #屏蔽的IP  103.129.97.141  1;
    }
    
  2. 在主配置nginx.conf中include以上配置,注意需要在http中include,而不是server中include,否则会提示Nginx: [emerg] "map" directive is not allowed here in xxxx

    1
    2
    
    include block_refer.conf;
    #注意路径
    
  3. 在对应域名的conf中引用该屏蔽规则

    1
    
    if ($block_ref_urls) {return 403;}
    

仿站已无法直接referer源站的资源:

image.png

但其实这个做法治标不治本,对方直接伪造referer就可以轻松突破,还是得做更深层次的安全措施,比如套cdn,在cdn层面做防盗链,URL鉴权之类的手段,更为安全。