Nginx服务之防盗链功能

Nginx防盗链

一.原理

二.配置指令

三.实例配置

一.原理

盗链是一种损害原有网站合法利益,给原网站所在服务器造成额外负担的非法行为。要采取防盗链的措施,首先需要了解盗链的实现原理。 客户端向服务器请求资源时,为了减少网络带宽,提高响应时间,服务器一般不会一次将所有资源完整地传回给客户端。比如在请求一个网页时,首先会传回该网页的文本内容,当客户端浏览器在解析文本的过程中发现有图片存在时,会再次向服务器发起对该图片资源的请求,服务器将存储的图片资源再发送给客户端。在这个过程中,如果该服务器上只包含了网页的文本内容,并没有存储相关的图片资源,而是将图片资源链接到其他站点的服务器上去了,这就形成了盗链行为。

比如内网用户通过Internet访问域名为www.test.com这个服务器上的WEB服务,而该服务器没有存储图片资源,而是将图片链接到域名为www.fz.com服务器上,这就形成了盗链行为。这种情况下客户端请求 图片资源实际上是来自其他的服务器。

要实现防盗链,需要了解HTTP协议中的请求头部的Referer头域和采用URL的格式表示访问当前网页或者文件的源地址。通过该头域的值,我们可以检测到访问目标资源的源地址。这样,如果我们检测到Referer头域中的值并不是自己站点内的URL,就采取组织措施,实现防盗链。

需要注意是,由于Referer头域中的值可以被更改的,因此该方法不能完全阻止所有盗链行为。

二.配置指令

Nginx配置中有一个指令valid_referers,用来获取Referer头域中的值,并且根据该值的情况给Nginx全局变量$invalid_referer的值,如果Referer头域中没有符合valid_referers指令配置的值,$invalid_referer变量将会被赋值为1。

valid_referer指令的语法结构为:

valid_referers none | blocked | server_names | string ....;
none 检测Referer头域不存在的请求
blocked 检测Referer头域的值被防火墙或者代理服务器删除或伪装的情况。
这种情况下,该头域的值不以“http://”或者“https://”开头
server_names 设置一个或多个URL,检测Referer头域的值是否是这些URL中的某个。
从nginx 0.5.33以后支持使用通配符“*”。

三.实例配置

环境:2台CentOS6操作系统的主机

盗链服务器的IP为192.168.16.133 域名www.test.com

被盗链服务器为192.168.16.130  域名www.fz.com

一台win7客户端用来测试,IP为192.168.16.128

最终达到的效果是,www.fz.com站点成功防盗链,而且将客户端请求的URL重写为http://summer.fz.com/123.jpg,成功防止盗链行为。

1.盗链服务器的配置

(1)查看Linux服务器版本

[[email protected] ~]# cat /etc/redhat-release 
CentOS release 6.7 (Final)
[[email protected] ~]# uname -r
2.6.32-573.el6.x86_64

(2)然后我提前编译安装好了Nginx服务,这是nginx版本

[[email protected] ~]# nginx -v
nginx version: nginx/1.11.5

(3)编辑nginx配置文件,创建一个测试的站点

server {              				server标签
listen       80;      				侦听80端口
server_name  www.test.com;     			域名为www.test.com 
location / {   					location块
root   /var/html/test;   			网站根目录在/var/html/test
index  index.html index.htm; 			index首页
access_log      logs/test_access.log;  		访问日志路径
error_log       logs/test_error.log;        	错误日志路径
}

(4)检测语法,平滑重启

[[email protected] test]# nginx -t  检测语法,是否有错误
nginx: the configuration file /application/nginx-1.10.1/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.1/conf/nginx.conf test is successful
[[email protected] test]# nginx -s reload 平滑重启

2.被盗链服务器的配置

(1)查看Linux版本

[[email protected] ~]# cat /etc/redhat-release 
CentOS release 6.7 (Final)
[[email protected] ~]# uname -r
2.6.32-573.el6.x86_64

(2)然后我也是提前编译安装好了Nginx服务,这是nginx版本

[[email protected] ~]# nginx -v
nginx version: nginx/1.10.1

(3)编辑nginx配置文件,创建一个测试的站点

 server {
         listen       80;
         server_name  www.fz.com;
         root    /var/html/fz;
         access_log logs/fz_access.log;
         error_log  logs/fz_error.log;
}

(4)检测语法,平滑重启

[[email protected] conf]# nginx -t
nginx: the configuration file /application/nginx-1.10.1/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.1/conf/nginx.conf test is successful
[[email protected] conf]# nginx -s reload

3.现在基本都搭建好,现在www.test.com站点服务器上添加一个html文件

(1)echo双引号的内容的意思是,当客户端访问自身服务器的www.test.com图片资源时,由于没有图片提供给客户端,将图片资源链接到www.fz.com上,从而返回给客户端。

[[email protected] conf]# cd /var/html/test/
[[email protected] test]# echo "img src = "http://www.fz.com/images/b-logo1.png">" > index.html

客户端用浏览器访问www.test.com,返回的是www.fz.com上 图片资源 ,盗链成功

可以看到Referer的头域的值来自www.test.com

(2)根据文件类型实现防盗链的配置实例

在www.fz.com服务器上编辑nginx.conf配置文件

 28     server {
 29         listen       80;
 30         server_name  www.fz.com;
 31         root    /var/html/fz;
 32         location ~ .*\.(gif|jpg|png|flv|swf|rar|zip)$  
 33         {
 34         valid_referers fz.com *.fz.com;
 35         if ($invalid_referer)
 36         {
 37         rewrite ^/ http://summer.fz.com/123.jpg;
 38         }
 39 }
 40 }
 41         server {
 42         listen  80;
 43         server_name summer.fz.com;
 44         root /var/html/time;
 46 }
 47 }

在配置中,32行当有网络连接对以gid、jpg、png为后缀的图片资源、以flv、swf为后缀的媒体资源以rar、zip为后缀的压缩存档资源发起请求时,34行如果检测到Referer头域中没有符合valid_referers指令配置的值,就将客户端请求 URL重写为http://summer.fz.com/123.jpg。

为什么还要一个server标签,这是有原因的,当时自己看书看博文学习做实验的时候,发现一直跳转不到想要的结果,而是一个空白页面,几经周折,在51的博文无意发现关于Nginx防盗链的一段话,就是37行的rewrite ^/ http://summer.fz.com/123.jpg

这个图片是盗链返回的图片,也就是替换盗链网站所有盗链的图片。这个图片要放在没有设置防盗链的网站上,因为防盗链的作用,这个图片如果也放在防盗链网站上就会被当作防盗链显示不出来了,盗链者的网站所盗链图片会显示X符号。

所以为了达到自己期待效果,新建一个server标签,让URL重写到该站点下的图片。

最后,我用客户端再次访问www.test.com,看看结果怎样?

可以看到请求头信息和原始头信息,因为www.fz.com做了防盗链,只要不是以*.fz.com域名的访问,都转到summer.fz.com/123.jpg去。

最后补充一下,这只是个人的做法,以供参考,那个画图IP地址是练习用的,公网上不能用私有地址的啦。

谢谢各位,成功那刻,心里美滋滋的。

时间: 2024-12-26 05:28:46

Nginx服务之防盗链功能的相关文章

配置Nginx实现防盗链功能!

准备两台Linux,用第二台linux主机来通过拿第一台主机的图片链接来展现图片: 因为主机2是通过主机1拿的图片链接所以当别人都通过链接访问图片时,占用的是主机一的内存空间,而不是占用主机2的内存空间 A)设定主机一为本公司的服务器,一旦非本公司人员通过链接去访问图片时,会对服务器造成内存压力. 解决方法,主机一做防盗链功能可以有效的阻止非本公司人员访问图片.以造成内存压力------->这样主机2将访问不到图片即使有图片链接 第一台Ip地址为:192.168.200.115 第二台ip地址值

Linux之nginx优化与防盗链

Linux之nginx优化与防盗链 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为"engine X",是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发. Nginx以事件驱动(epoll)的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理.负载平衡.但是Nginx并不支持cgi方式运行,原因是可以减少因

8. Nginx资源的防盗链

valid_referers 语法使用说明: http://nginx.org/en/docs/http/ngx_http_referer_module.html#valid_referers valid_referers none blocked server_names *.example.com example.* www.example.org/galleries/ ~\.google\.; if ($invalid_referer) { return 403; } valid_refe

防盗链Nginx设置图片防盗链,设置无效的请仔细看红字

*******************************************************************切记,替换的图片地址要使用没有防盗链的网站图片,否则由于替换的图片其实也处于防盗链情况下,会造成仍旧无法显示设置的图片.******************************************************************* 一.全站图片防盗链 在/usr/local/nginx/conf/nginx.conf文件要添加防盗链的ser

nginx secure_link下载防盗链

下载服务器上有众多的软件资源, 可是很多来源不是本站,是迅雷.flashget, 源源不断的带宽,防盗链绝对是当务之急. 使用来源判断根本不靠谱,只能防止一些小白站点的盗链,迅雷之类的下载工具完全无效,如果你是nginx的话,使用secure link完美解决这个问题,远离迅雷.本文仅用于下载服务器,不适用于图片防盗链. 1. 安装nginx 默认情况下nginx不会安装secure_link模块,需要手动指定,配置参数如下 # ./configure --with-http_secure_li

nginx服务器图片防盗链的方法

nginx服务器图片防盗链的方法<pre> location ~* \.(gif|jpg|png|jpeg)$ { expires 30d; valid_referers *.shuchengxian.com www.shuchengxian.com; if ($invalid_referer) { rewrite ^/ http://www.shuchengxian.cn/404.jpg; } }</pre>代码解释: <pre>//其中“gif|jpg|jpeg|p

Nginx优化与防盗链

Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为"engine X",是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发. Nginx以事件驱动(epoll)的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理.负载平衡.但是Nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞.所以必须使

具有P2P及防盗链功能的OTT/IPTV互联网解决方案

随着信息技术的快速发展和社会信息化需求的增加,2001 年,国家"十五"计划纲要明确的提出了三网融合政策,明确相互进入的准则,在随后相继出现了多种融合形态及创新的业务模式,OTT 互联网业务电视就是其中代表性的一种. 互联网OTT业务方便了人们观看互联网电视,获得更好的网络体验.目前国内的OTT系统网络电视盒子种类繁多,质量也是参差不齐.这也正说明市场处在激烈的竞争阶段,进入的门槛也比较低.很多运营商看好这个市场,想要运营的网络电视盒或者希望在国外面向华人华侨发行,选择合适的OTT直播

Nginx实现图片防盗链(referer指令)

什么是图片盗链   每张图片在浏览器中都有对应的图片地址,在浏览器中输入这个地址是可以直接拿到图片. 图片盗链,就是盗用者在他的站上需要显示我们的图片,他没有把图片拿下来,放到他的服务器上, 而是直接就用我们的,图片地址,来请求到我们的服务器来拿图片,流量产生在我们这边. referer referer指令通过检测访问图片的来源,来做出一些控制. 图片访问的来源 通过谷歌/百度访问 通过浏览器直接访问 本站点的访问 来自非法的域名访问 referer nginx 模块 ngx_http_refe