完美的nginx图片防盗链设置详解

摘要:
1[ root@web01vhosts]#catdefault.conf服务器{3listen80default_server;/tmp/phpcgi.sock;19includedefaultcgi.conf;20}21access_log/app/log/nginx/access/default.log;

一般,我们做好防盗链之后其他网站盗链的本站图片就会全部失效无法显示,但是您如果通过浏览器直接输入图片地址,仍然会显示图片,仍然可以右键图片另存为下载文件!依然可以下载?这样就不是彻底的防盗链了!

 1 [root@web01 vhosts]# cat default.conf
 2 server {
 3     listen 80 default_server;
 4     server_name 192.168.1.24 web01.espressos.cn *.qq.com *.baidu.com;
 5     root /app/www;
 6     index index.php index.html index.htm;
 7     location ~* .(gif|jpg|png|swf|flv)$ {
 8     valid_referers none blocked *.espressos.cn;
 9     if ($invalid_referer) {
10         rewrite ^/ http://192.168.1.25/404.jpg;
11         #return 404;
12         }
13     }
14     location ~ .*.(php|php5)?$
15     {
16        #fastcgi_pass  unix:/tmp/php-cgi.sock;
17         fastcgi_pass  127.0.0.1:9000;
18     fastcgi_index index.php;
19     include fastcgi.conf;
20     }
21     access_log  /app/log/nginx/access/default.log;
22 }

注意第8行 “valid_referers none blocked" 其中"none" "blocked" 的意思分别是:

none代表没有referer;blocded代表有referer但是被防火墙或者是代理给去除了。

首先当我输入我要打开的网址的时候,因为是直接输入的没有referer所以匹配了
valid_referers后面的none或者是blocked 所以invalid_referer值为0 所以不进行跳转.
当我是从这个网站里面的链接跳到该网站首页的时候 因为referer的值是肯定包含srever_names 所以匹配了server_names所以不进行跳转。
当我从搜素引擎进去的时候因为referer字段类似于www.google.com.hk/search
开始进行匹配 发现没有一个匹配,则此时会设置invalid_referer值为1 if语句成功执行,进行了跳转. 达到功能

如果把这两个(none,blocked)去掉就可以真正的实现防盗连了!因为只有匹配到server_name的时候,才不会进行跳转。如下面实例:

完美的nginx图片防盗链设置详解第1张

[root@web01 www]# cat index.html 
<html>
<body>
<h1>hello world bass!! </h1>
<img alt="bass.png" src="/bass.png" height="auto" width="auto"></img>
</body>
</html>

接真输入图片地址可以显示图片:

完美的nginx图片防盗链设置详解第2张

 1 [root@web01 www]# cat /app/server/nginx/conf/vhosts/default.conf
 2 server {
 3     listen 80 default_server;
 4     server_name 192.168.1.24 web01.espressos.cn *.qq.com *.baidu.com;
 5     root /app/www;
 6     index index.php index.html index.htm;
 7     location ~* .(gif|jpg|png|swf|flv)$ {
 8     valid_referers *.espressos.cn;
 9     if ($invalid_referer) {
10         rewrite ^/ http://192.168.1.25/404.jpg;
11         #return 404;
12         }
13     }
14     location ~ .*.(php|php5)?$
15     {
16        #fastcgi_pass  unix:/tmp/php-cgi.sock;
17         fastcgi_pass  127.0.0.1:9000;
18     fastcgi_index index.php;
19     include fastcgi.conf;
20     }
21     access_log  /app/log/nginx/access/default.log;
22 }

注意第8号:8 valid_referers *.espressos.cn;去掉了none,blocked:(效果如下)

完美的nginx图片防盗链设置详解第3张

当再次输入web01.espressos.cn/bass.png时发生跳转到192.168.1.25/404.jpg:

完美的nginx图片防盗链设置详解第4张

这才实现了完美的防盗链!!

   请确保server段中只有一个location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$,否则可能导致代码无效,如有这个代码段请合并或删除。
    切记:如果要跳转到图片,记得替换的图片地址要使用没有防盗链的网站图片,否则由于替换的图片其实也处于防盗链情况下,会造成仍旧无法显示设置的图片。

免责声明:文章转载自《完美的nginx图片防盗链设置详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VUE自学之路7-vue模版语法(双向数据绑定)交换机到底有没有MAC地址?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用Proteus模拟操作HDG12864F-1液晶屏

  在Proteus中模拟了89C52操作HDG12864F-1液晶屏,原理图如下:   一、HDG12864F-1官网信息   该液晶屏是Hantronix的产品,官网上搜索出这个型号是系列型号中的一种,各种型号间的区别主要是尺寸不同、有无背光、背光颜色等等。    下面是官网中几个手册的链接: DataSheet 完整版说明书 控制器说明书,该...

CMFCTabCtrl的使用

1.在指定位置处创建一个CMFCTabCtrl,并给其添加4个CEdit, 01 CRect rectTab; 02 CEdit m_wnd1; 03 CEdit m_wnd2; 04 CEdit m_wnd3; 05 CEdit m_wnd4; 06 CMFCTabCtrl m_wndTab; 07   08 m_w...

postgresql-无序uuid tps测试

# postgresql-无序uuid tps测试## 无序uuid对数据库的影响由于最近在做超大表的性能测试,在该过程中发现了无序uuid做主键对表插入性能有一定影响。结合实际情况发现当表的数据量越大,对表插入性能的影响也就越大。### 测试环境PostgreSQL创建插入脚本,测试各种情况的tps。数据库版本:PostgreSQL 10.4 (Arte...

上传图片,预览并保存成blob类型 和 base64

场景: 获取到一个file类型的图片,如果直接在html中预览?这里就是利用html5的新特性,将图片转换为Base64的形式显示出来。有两种方法: 方法一:利用URL.createObjectURL() <!DOCTYPE html><html>  <head>     <title>base</ti...

xinetd网络(2) 协议头解析

1:在/etc/xinetd.d下添加配置文件xhttpd 1 service xhttpd 2 { 3 socket_type = stream //每行“=”前后各最多只能有一个空格 4 protocol= tcp 5 wait = no 6 user =nobody 7 server =/home/username/xhttpd...

7、使用linux上的nacos

新建module   打开nacos   接着调用9001的controller方法: @RestController public class PaymentController { ​ @Value("${server.port}") private String serverPort; ​ @GetMapping(valu...