Nginx从入门到入坟(九)- Nginx静态资源如何防盗链
目錄
- 1. 什么是資源盜鏈
- 2. Nginx防盜鏈的實現原理
- 3. 針對目錄進行防盜鏈
- 參考文獻
原文地址:https://program-park.github.io/2022/04/21/nginx_10/
1. 什么是資源盜鏈
??資源盜鏈指的是此內容不在自己服務器上,而是通過技術手段,繞過別人的限制將別人的內容放到自己頁面上最終展示給用戶,以此來盜取大網站的空間和流量。簡而言之就是用別人的東西成就自己的網站。
??效果演示,下面是京東和百度的兩張圖片:
??京東:https://img14.360buyimg.com/n7/jfs/t1/101062/37/2153/254169/5dcbd410E6d10ba22/4ddbd212be225fcd.jpg
??百度:https://pics7.baidu.com/feed/cf1b9d16fdfaaf516f7e2011a7cda1e8f11f7a1a.jpeg?token=551979a23a0995e5e5279b8fa1a48b34&s=BD385394D2E963072FD48543030030BB
??引用兩張圖片:
??效果:
??可以看出,百度的圖片添加了防止盜鏈的功能,而京東的圖片可以直接使用。
2. Nginx防盜鏈的實現原理
??講防盜鏈的原理之前,我們得先了解一個 HTTP 的頭信息 Referer,當瀏覽器向 Web 服務器發送請求的時候,一般都會帶上 Referer,來告訴瀏覽器該網頁是從哪個頁面鏈接過來的。
??后臺服務器可以根據獲取到的這個 Referer 信息來判斷是否為自己信任的網站地址,如果是則放行繼續訪問,如果不是則可以返回 403(服務端拒絕訪問)的狀態信息。
??Nginx 防盜鏈的具體實現:
??valid_referers: Nginx 會通就過查看 referer 自動和 valid_referers 后面的內容進行匹配,如果匹配到了就將$invalid_referer變量置 0,如果沒有匹配到,則將$invalid_referer變量置為 1,匹配的過程中不區分大小寫。
| 默認值 | - |
| 位置 | server、location |
- none:如果 Header 中的 Referer 為空,允許訪問;
- blocked:在 Header 中的 Referer 不為空,但是該值被防火墻或代理進行偽裝過,如不帶http://、https://等協議頭的資源允許訪問;
- server_names:指定具體的域名或者 IP;
- string:可以支持正則表達式和*的字符串。如果是正則表達式,需要以~開頭表示,例如:
??那么現在問題來了,圖片有很多,該如何批量進行防盜鏈?
3. 針對目錄進行防盜鏈
??配置如下:
location /images {valid_referers none blocked www.baidu.com 10.7.2.205 *.example.com example.* www.example.org ~\.google\.;if ($invalid_referer){return 403;}root /usr/local/nginx/html; }??這樣我們可以對一個目錄下的所有資源進行翻到了操作。
??還有一個問題:Referer 的限制比較粗,比如隨意加一個 Referer,上面的方式是無法進行限制的。那么這個問題改如何解決?
??此處我們需要用到 Nginx 的第三方模塊ngx_http_accesskey_module,第三方模塊如何實現盜鏈,如何在 Nginx 中使用第三方模塊的功能,這些我們在后面的 Nginx 的模塊篇再進行詳細的講解。
參考文獻
??【1】https://www.bilibili.com/video/BV1ov41187bq?p=64
總結
以上是生活随笔為你收集整理的Nginx从入门到入坟(九)- Nginx静态资源如何防盗链的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python创建虚拟环境失败_?cond
- 下一篇: 新中新电子f200a驱动安装_【电子税务