栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【初探篇】Nginx配置防盗链(详细了解如何配置nginx防盗链)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【初探篇】Nginx配置防盗链(详细了解如何配置nginx防盗链)

本专栏将会从基础开始,循序渐进讲解Nginx的使用和有关配置,也请大家多多支持,希望大家都能够从中获益。
专栏地址:Nginx
相关软件:链接地址

文章目录
    • 防盗链
      • nginx防盗链配置
        • valid_referers解释
      • 使用curl测试
      • 配置错误提示页面
        • 返回错误页面
        • 返回出错图片

防盗链

盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。

nginx防盗链配置

为了模拟盗链,在这里让101为服务站点,102为网关服务器,103访问102进行盗链。

101的nginx.cfg

worker_processes  1; #允许进程数量,建议设置为cpu核心数或者auto自动检测,注意Windows服务器上虽然可以启动多个processes,但是实际只会用其中一个

events {
    #单个进程最大连接数(最大连接数=连接数*进程数)
    #根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。
    worker_connections  1024;
}


http {
    #文件扩展名与文件类型映射表(是conf目录下的一个文件)
    include       mime.types;
    #默认文件类型,如果mime.types预先定义的类型没匹配上,默认使用二进制流的方式传输
    default_type  application/octet-stream;

    #sendfile指令指定nginx是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度。
    sendfile        on;
    
     #长连接超时时间,单位是秒
    keepalive_timeout  65;

#定义一组服务器
upstream httpds{
    server 192.168.8.102 weight=10;
    server 192.168.8.103 weight=1;
}

 #虚拟主机的配置
    server {
    #监听端口
        listen       80;
        #域名,可以有多个,用空格隔开
        server_name  test80.xzj520520.cn;

	#配置根目录以及默认页面
        location / {
            proxy_pass http://httpds;
            # root   /www/test80;
            # index  index.html index.htm;
        }

	#出错页面配置
        error_page   500 502 503 504  /50x.html;
        #/50x.html文件所在位置
        location = /50x.html {
            root   html;
        }
        
    }
    

}

102的nginx.cfg

worker_processes  1;



events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;


    server {
        listen       80;
        server_name  localhost;


        location / {
            proxy_pass http://192.168.8.101:8080;
        }
        
        
        location ^~/images/ {
            root   /www/resources;
        }
       
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

103的nginx.cfg

worker_processes  1;



events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;


    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://192.168.8.102;
        }
         
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

}

访问http://192.168.8.103/:

如果不想被盗链,可以对网关服务器102做如下配置:

nginx.cfg

worker_processes  1;



events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;


    sendfile        on;
    
    keepalive_timeout  65;


    server {
        listen       80;
        server_name  localhost;


        location / {
            proxy_pass http://192.168.8.101:8080;
        }
        
        
        
        location ^~/images/ {
            valid_referers 192.168.8.102;  #valid_referers 指令,配置是否允许 referer 头部以及允许哪些 referer 访问。192.168.8.102不是ip而是域名(去掉http:// 前缀)
            if ($invalid_referer) {  # 注意这里if后要加空格
                return 403; ## 返回错误码
            }
            
            root   /www/resources;
        }
        

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }


}

测试,访问http://192.168.8.103/:

valid_referers解释

可以同时携带多个参数,表示多个 referer 头部都生效。

参数值

  • none:允许没有 referer 信息的请求访问,即直接通过url访问。
  • blocked:请求头Referer字段不为空(即存在Referer),但是值可以为空(值被代理或者防火墙删除了),并且允许refer不以“http://”或“https://”开头,通俗点说就是允许“http://”或"https//"以外的请求。
  • server_names:若 referer 中站点域名与 server_name 中本机域名某个匹配,则允许该请求访问
  • 其他字符串类型:检测referer与字符串是否匹配,如果匹配则允许访问,可以采用通配符*
  • 正则表达式:若 referer 的值匹配上了正则,就允许访问

invalid_referer 变量

  • 允许访问时变量值为空
  • 不允许访问时变量值为 1

server {
    server_name referer.test.com;
    listen 80;

    error_log logs/myerror.log debug;
    root html;
    location / {
        valid_referers none server_names
                       *.test.com www.test.org.cn/nginx/;
        if ($invalid_referer) {
                return 403; # 返回错误码
        }
        return 200 'validn';
    }
}

# none:表示没有 referer 的可以访问
# server_names:表示本机 server_name 也就是 referer.test.com 可以访问
# *.test.com:匹配上了正则的可以访问
# www.test.org.cn/nginx/:该页面发起的请求可以访问

设置为none的情况:

使用curl测试

从baidu访问过来的请求:

如果添加了baidu.com,发现访问成功:

配置错误提示页面 返回错误页面

在102nginx的html目录中添加403.html





Error



An error occurred.

非法请求.

修改nginx.conf

代码如下:

worker_processes  1;



events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

   

    sendfile        on;

    keepalive_timeout  65;



    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://192.168.8.101:8080;
        }
        
        
        location ^~/images/ {
            valid_referers 192.168.8.102 baidu.com;
            if ($invalid_referer) {
                return 403; # 返回错误码
            }
            
            root   /www/resources;
        }
        

        error_page   403  /403.html;
        location = /403.html {
            root   html;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        
    }

}

访问http://192.168.8.103/images/bg.jpg

返回出错图片

修改网关服务器102

将403.png保存到/www/resources/images中

访问192.168.8.103:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/854578.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号