011.Nginx防盜鏈

一 盜鏈


1.1 盜鏈概述


盜鏈指的是在自己的介面展示非本伺服器上的內容,通過技術手段獲得其他伺服器的資源。繞過他人資源展示頁面,在自己頁面向用戶提供此內容,從而減輕自己伺服器的負擔,因為真實的空間和流量來自其他伺服器。


因此,通常為了避免被盜鏈,通常Web伺服器建議配置防盜鏈,其主要防盜鏈思路是能區別哪些請求是非正常用戶請求。


二 防盜鏈


2.1 防盜鏈配置


語法:valid_referers none | blocked | server_names | string …;


默認值:——


可配置段:server, location


2.2 環境準備

























主機

域名

IP

備註

nginx01

good.linuxds.com

172.24.10.21

被盜方

nginx02

steal.uclouda.com

172.24.10.22

盜鏈方


添加解析:/etc/hosts


  1 172.24.10.21	good.odocker.com
  2 172.24.10.22    steal.uclouda.com
  3 [root@nginx0X ~]# nginx -V
  4 nginx version: nginx/1.16.1


2.3 模擬盜鏈


  1 [root@nginx01 ~]# vi /etc/nginx/conf.d/good.conf	#創建模擬被盜方配置
  2 server {
  3     listen  80;
  4     charset utf-8;
  5         server_name  good.linuxds.com;
  6     location / {
  7         root   /usr/share/nginx/good;
  8         index  index.html;
  9         access_log  /var/log/nginx/good.access.log  main;
 10         error_log   /var/log/nginx/good.error.log  warn;
 11   }
 12 }


  1 [root@nginx01 ~]# mkdir -p /usr/share/nginx/good/images
  2 [root@nginx01 ~]# echo '<h1>Good</h1>' > /usr/share/nginx/good/index.html
  3 [root@nginx01 ~]# ll /usr/share/nginx/good/images	#上傳一張測試圖片
  4 total 60K
  5 -rw-r--r-- 1 root root 4.8K Mar 11 16:27 baidu.png



  1 [root@nginx02 ~]# vi /etc/nginx/conf.d/steal.conf	#創建盜鏈方配置
  2 server {
  3     listen  80;
  4     charset utf-8;
  5     server_name  steal.uclouda.com;
  6     location / {
  7         root   /usr/share/nginx/steal;
  8         index  index.html;
  9         access_log  /var/log/nginx/steal.access.log  main;
 10         error_log   /var/log/nginx/steal.error.log  warn;
 11   }
 12 }


  1 [root@nginx02 ~]# mkdir -p /usr/share/nginx/steal
  2 [root@nginx02 ~]# vi /usr/share/nginx/steal/index.html
  3 <html>
  4 <body>
  5 <br>盜鏈圖片</br>
  6 <img src="//good.linuxds.com/images/baidu.png">
  7 </body>
  8 </html>


  1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf	#檢查配置文件
  2 [root@nginx01 ~]# nginx -s reload			#重載配置文件
  3 [root@nginx02 ~]# nginx -t -c /etc/nginx/nginx.conf	#檢查配置文件
  4 [root@nginx02 ~]# nginx -s reload			#重載配置文件


瀏覽器訪問://good.linuxds.com/images/baidu.png


clipboard


瀏覽器訪問盜鏈網站://steal.uclouda.com/


clipboard


2.4 防止盜鏈配置01


  1 [root@nginx01 ~]# vi /etc/nginx/conf.d/good.conf
  2 server {
  3     listen  80;
  4     charset utf-8;
  5     server_name  good.linuxds.com;
  6     location / {
  7         root   /usr/share/nginx/good;
  8         index  index.html;
  9         access_log  /var/log/nginx/good.access.log  main;
 10         error_log   /var/log/nginx/good.error.log  warn;
 11         valid_referers none blocked good.linuxds.com;
 12         if ($invalid_referer) {
 13             return 403;
 14         }
 15   }
 16 }


  1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf	#檢查配置文件
  2 [root@nginx01 ~]# nginx -s reload			#重載配置文件


配置釋義:


valid_referers:此關鍵字定義了白名單,即本機自身訪問允許;


invalid_referer:此為內置變數,通過判斷上一行中的valid_referers值會返回0或者1,




  • none代表請求頭中沒有referer資訊,這一般是直接在瀏覽器輸入圖片網址;

  • blocked代表被防火牆過濾標記過的請求。如果訪問來源不在白名單內,則返回403錯誤

  • 瀏覽器訪問://good.linuxds.com/images/baidu.png


    clipboard


    瀏覽器訪問盜鏈網站://steal.uclouda.com/


    clipboard


    如上所示:已成功配置防盜鏈。


    2.5 防盜鏈配置02


      1 [root@nginx01 ~]# vi /etc/nginx/conf.d/good.conf
      2 server {
      3     listen  80;
      4     charset utf-8;
      5         server_name  good.linuxds.com;
      6     location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {	#針對特定文件類型
      7       valid_referers none blocked *.linuxds.com linuxds.com;
      8       access_log  /var/log/nginx/good.access.log  main;
      9       error_log   /var/log/nginx/good.error.log  warn;
     10       if ($invalid_referer) {
     11           rewrite ^/ https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1767274412,1868768041&fm=26&gp=0.jpg;
     12     }
     13   }
     14 }


      1 [root@nginx01 ~]# nginx -t -c /etc/nginx/nginx.conf	#檢查配置文件
      2 [root@nginx01 ~]# nginx -s reload			#重載配置文件


    配置釋義:


    rewrite:判斷如果不是白名單第五行則進行重定向到自定義的固定鏈接。


    瀏覽器訪問盜鏈網站://steal.uclouda.com/


    clipboard