Nginx从入门到入坟(九)- Nginx静态资源如何防盗链
目錄
- 1. 什么是資源盜鏈
- 2. Nginx防盜鏈的實(shí)現(xiàn)原理
- 3. 針對目錄進(jìn)行防盜鏈
- 參考文獻(xiàn)
原文地址:https://program-park.github.io/2022/04/21/nginx_10/
1. 什么是資源盜鏈
??資源盜鏈指的是此內(nèi)容不在自己服務(wù)器上,而是通過技術(shù)手段,繞過別人的限制將別人的內(nèi)容放到自己頁面上最終展示給用戶,以此來盜取大網(wǎng)站的空間和流量。簡而言之就是用別人的東西成就自己的網(wǎng)站。
??效果演示,下面是京東和百度的兩張圖片:
??京東: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防盜鏈的實(shí)現(xiàn)原理
??講防盜鏈的原理之前,我們得先了解一個(gè) HTTP 的頭信息 Referer,當(dāng)瀏覽器向 Web 服務(wù)器發(fā)送請求的時(shí)候,一般都會(huì)帶上 Referer,來告訴瀏覽器該網(wǎng)頁是從哪個(gè)頁面鏈接過來的。
??后臺(tái)服務(wù)器可以根據(jù)獲取到的這個(gè) Referer 信息來判斷是否為自己信任的網(wǎng)站地址,如果是則放行繼續(xù)訪問,如果不是則可以返回 403(服務(wù)端拒絕訪問)的狀態(tài)信息。
??Nginx 防盜鏈的具體實(shí)現(xiàn):
??valid_referers: Nginx 會(huì)通就過查看 referer 自動(dòng)和 valid_referers 后面的內(nèi)容進(jìn)行匹配,如果匹配到了就將$invalid_referer變量置 0,如果沒有匹配到,則將$invalid_referer變量置為 1,匹配的過程中不區(qū)分大小寫。
| 默認(rèn)值 | - |
| 位置 | server、location |
- none:如果 Header 中的 Referer 為空,允許訪問;
- blocked:在 Header 中的 Referer 不為空,但是該值被防火墻或代理進(jìn)行偽裝過,如不帶http://、https://等協(xié)議頭的資源允許訪問;
- server_names:指定具體的域名或者 IP;
- string:可以支持正則表達(dá)式和*的字符串。如果是正則表達(dá)式,需要以~開頭表示,例如:
??那么現(xiàn)在問題來了,圖片有很多,該如何批量進(jìn)行防盜鏈?
3. 針對目錄進(jìn)行防盜鏈
??配置如下:
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; }??這樣我們可以對一個(gè)目錄下的所有資源進(jìn)行翻到了操作。
??還有一個(gè)問題:Referer 的限制比較粗,比如隨意加一個(gè) Referer,上面的方式是無法進(jìn)行限制的。那么這個(gè)問題改如何解決?
??此處我們需要用到 Nginx 的第三方模塊ngx_http_accesskey_module,第三方模塊如何實(shí)現(xiàn)盜鏈,如何在 Nginx 中使用第三方模塊的功能,這些我們在后面的 Nginx 的模塊篇再進(jìn)行詳細(xì)的講解。
參考文獻(xiàn)
??【1】https://www.bilibili.com/video/BV1ov41187bq?p=64
總結(jié)
以上是生活随笔為你收集整理的Nginx从入门到入坟(九)- Nginx静态资源如何防盗链的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python创建虚拟环境失败_?cond
- 下一篇: nginx 上传 文件超时设置_Ngin