Nginx防盗链的实现原理和实现步骤
Nginx防盜鏈的實現原理:
?
了解防盜鏈的原理之前,我們得先學習一個HTTP的頭信息Referer,當瀏覽器向web服務器發(fā)送請求的時候,一般都會帶上Referer,來告訴瀏覽器該網頁是從哪個頁面鏈接過來的。
后臺服務器可以根據獲取到的這個Referer信息來判斷是否為自己信任的網站地址,如果是則放行繼續(xù)訪問,如果不是則可以返回403(服務端拒絕訪問)的狀態(tài)信息。
在本地模擬上述的服務器效果:
Nginx防盜鏈的具體實現:
valid_referers:nginx會通就過查看referer自動和valid_referers后面的內容進行匹配,如果匹配到了就將$invalid_referer變量置0,如果沒有匹配到,則將$invalid_referer變量置為1,匹配的過程中不區(qū)分大小寫。
| 默認值 | — |
| 位置 | server、location |
none: 如果Header中的Referer為空,允許訪問
blocked:在Header中的Referer不為空,但是該值被防火墻或代理進行偽裝過,如不帶"http://" 、"https://"等協(xié)議頭的資源允許訪問。
server_names:指定具體的域名或者IP
string: 可以支持正則表達式和*的字符串。如果是正則表達式,需要以~開頭表示,例如
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;}遇到的問題:圖片有很多,該如何批量進行防盜鏈?
針對目錄進行防盜鏈
配置如下:
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;}這樣我們可以對一個目錄下的所有資源進行翻到了操作。
遇到的問題:Referer的限制比較粗,比如隨意加一個Referer,上面的方式是無法進行限制的。那么這個問題改如何解決?
此處我們需要用到Nginx的第三方模塊ngx_http_accesskey_module,第三方模塊如何實現盜鏈,如果在Nginx中使用第三方模塊的功能,這些我們在后面的Nginx的模塊篇再進行詳細的講解。
總結
以上是生活随笔為你收集整理的Nginx防盗链的实现原理和实现步骤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx静态资源盗链的效果展示
- 下一篇: 谈谈GIS三维渲染引擎