Nginx防盗链的实现原理和实现步骤
Nginx防盜鏈的實(shí)現(xiàn)原理:
?
了解防盜鏈的原理之前,我們得先學(xué)習(xí)一個(gè)HTTP的頭信息Referer,當(dāng)瀏覽器向web服務(wù)器發(fā)送請(qǐng)求的時(shí)候,一般都會(huì)帶上Referer,來告訴瀏覽器該網(wǎng)頁(yè)是從哪個(gè)頁(yè)面鏈接過來的。
后臺(tái)服務(wù)器可以根據(jù)獲取到的這個(gè)Referer信息來判斷是否為自己信任的網(wǎng)站地址,如果是則放行繼續(xù)訪問,如果不是則可以返回403(服務(wù)端拒絕訪問)的狀態(tài)信息。
在本地模擬上述的服務(wù)器效果:
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á)式,需要以~開頭表示,例如
location ~*\.(png|jpg|gif){valid_referers none blocked www.baidu.com 192.168.200.222 *.example.com example.* www.example.org ~\.google\.;if ($invalid_referer){return 403;}root /usr/local/nginx/html;}遇到的問題:圖片有很多,該如何批量進(jìn)行防盜鏈?
針對(duì)目錄進(jìn)行防盜鏈
配置如下:
location /images {valid_referers none blocked www.baidu.com 192.168.200.222 *.example.com example.* www.example.org ~\.google\.;if ($invalid_referer){return 403;}root /usr/local/nginx/html;}這樣我們可以對(duì)一個(gè)目錄下的所有資源進(jìn)行翻到了操作。
遇到的問題:Referer的限制比較粗,比如隨意加一個(gè)Referer,上面的方式是無法進(jìn)行限制的。那么這個(gè)問題改如何解決?
此處我們需要用到Nginx的第三方模塊ngx_http_accesskey_module,第三方模塊如何實(shí)現(xiàn)盜鏈,如果在Nginx中使用第三方模塊的功能,這些我們?cè)诤竺娴腘ginx的模塊篇再進(jìn)行詳細(xì)的講解。
總結(jié)
以上是生活随笔為你收集整理的Nginx防盗链的实现原理和实现步骤的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx静态资源盗链的效果展示
- 下一篇: Nginx代理概述及环境准备