Nginx
防止 Nginx 上的盜鏈
我正在嘗試保護我的圖像免遭盜鏈。我的第一種方法是:
location ~* \.(png|jpg)$ { valid_referers none blocked server_names; if ($invalid_referer) { return 403; } }
這裡的問題是none標籤,因為如果你直接輸入一個url就沒有referer。因此,如果使用者直接輸入網址,每個網站仍然可以顯示我的圖片。所以我刪除了none標籤,令人驚訝的是它仍在我的網站上執行。
如果我直接輸入我的網址,它仍然可以工作。但為什麼?
現在我的推薦人是空的,但我仍然可以看到我的圖像。由於server_names標籤,它確實有效,但據我所知,server_names意味著如果有人在引用者中有我的伺服器名稱,他們可以顯示我的圖像。但是如果我直接輸入我的網址,我就沒有推薦人。
誰可以給我解釋一下這個?
這在以下文件中得到了很好的解釋
valid_referers
:
none
請求標頭中缺少該
Referer
欄位;
blocked
該
Referer
欄位存在於請求標頭中,但其值已被防火牆或代理伺服器刪除;這些值是不以http://
or開頭的字元串https://
;
server_names
請求頭
Referer
欄位包含伺服器名稱之一;它的行為就像它應該的那樣:
none
允許沒有任何引用者的請求並且server_names
引用者與您的伺服器名稱匹配。此設置用於防止盜鏈,即將您的圖像嵌入其他站點。如果您知道 URL,則不應阻止查看圖像,例如,如果您在頁面源上查找它。
此外,您必須首先考慮網站的可用性。畢竟,您只是想向在其頁面上使用您的圖像的人發表聲明,而不是向實際查看它們的人發表聲明。某些瀏覽器或防火牆可能會刪除引薦來源網址,即使在您自己的網站上不允許使用
none
.如果您想非常嚴格,我不建議您這樣做,那麼您根本就不會依賴推薦人。相反,您可以在頁面上設置限時 cookie,並在嘗試訪問圖像時檢查該 cookie 的存在。