Nginx 防盜鏈
本篇主要介紹一下 nginx 中 防盜鏈的具體配置 , 以及http 的 referer 頭
概述
防盜鏈其實就是 防止別的站點來引用你的 資源, 佔用你的流量
在瞭解nginx 防盜鏈之前 我們先了解一下 什麼是 HTTP 的頭資訊 Referer,當瀏覽器訪問網站的時候,一般會帶上Referer,告訴後端該是從哪個頁面過來的
nginx的 防盜鏈'功能基於 HTTP協議的Referer機制,透過判斷Referer對來源進行 識別和判斷 做出一定的處理
nginx會通就過檢視referer自動和valid_referers後面的內容進行匹配
,如果匹配到了就將invalid_referer 變數置位1
, 如果沒有匹配到 , 則 將 invalid_referer變數置0 , 匹配的過程中不區分大小寫.
語法 | valid_referers none blocked server_names string… |
---|---|
預設值 | — |
位置 | server、location |
Nginx 防盜鏈演示
這裡我拿圖片等資源 作為案例演示
未配置 防盜鏈的情況
如果你的圖片沒有做防盜鏈的控制 , 像如下配置一樣, 那麼其他人就可以直接使用你的檔案圖片等等
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.testfront.com;
location ~* .(gif|jpg|png) {
root /www/static;
}
location / {
proxy_pass http://www.testbackend.com;
}
}
}
可以看到在其他機器上如 www.testbackend.com 直接引入 www.testfront.com的資原始檔 , 也是可以展示的
配置nginx防盜鏈
如果配置了valid_referers
nginx會通就過檢視referer自動和valid_referers後面的內容進行匹配
,如果匹配到了就將invalid_referer 變數置位1
, 如果沒有匹配到 , 則 將 invalid_referer變數置0 , 匹配的過程中不區分大小寫.
location ~* .(gif|jpg|png) {
# 配置校驗 referer , 意思就是如果referer 是172.16.225.111 或者 www.testfront.com 都透過
valid_referers 172.16.225.111 www.testfront.com;
if ($invalid_referer) {
return 403;
}
root /www/static;
}
此時再訪問 www.testbackend.com 去引用 www.testfront.com 的資源 就不能訪問了
3. 防盜鏈的 具體配置
從上面可以看出, 透過配置 valid_referers 後面新增校驗的域名和ip , nginx 會自動進行 http的 referer 的匹配
防盜鏈除了可以配置 ip 域名外, 還能配置 如 none 和 blocked
-
none: 如果Header中的Referer為空,允許訪問
-
blocked:在Header中的Referer不為空,但是該值被防火牆或代理進行偽裝過,如不帶"http://" 、"https://"等協議頭的資源允許訪問。
-
server_names:指定具體的域名或者IP
可以支援正規表示式和*的字串。如果是正規表示式,需要以~開頭表示
4.擴充套件Curl 訪問
可以透過curl 直接進行訪問 並且指定 referer 來快速測試
curl -i 只看返回頭資訊
curl -e "" 指定 referer
總結
本篇主要介紹了 nginx中如何配置 防盜鏈, 來限制別人隨意的引用你的資源 造成佔用你的網路資源情況, 配置還是畢竟簡單的.
歡迎大家訪問 個人部落格 Johnny小屋
歡迎關注個人公眾號