011.Nginx防盜鏈
一 盜鏈
1.1 盜鏈概述
盜鏈指的是在自己的介面展示非本伺服器上的內容,通過技術手段獲得其他伺服器的資源。繞過他人資源展示頁面,在自己頁面向用戶提供此內容,從而減輕自己伺服器的負擔,因為真實的空間和流量來自其他伺服器。
因此,通常為了避免被盜鏈,通常Web伺服器建議配置防盜鏈,其主要防盜鏈思路是能區別哪些請求是非正常用戶請求。
二 防盜鏈
2.1 防盜鏈配置
語法:valid_referers none | blocked | server_names | string …;
默認值:——
可配置段:server, location
2.2 環境準備
添加解析:/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
瀏覽器訪問盜鏈網站://steal.uclouda.com/
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,
瀏覽器訪問://good.linuxds.com/images/baidu.png
瀏覽器訪問盜鏈網站://steal.uclouda.com/
如上所示:已成功配置防盜鏈。
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/