判斷一個請求的Referer可以有效的防止盜鏈,使用nginx相應的HTTP Referer模塊(HTTP Referer)可以實現此功能.
當一個請求頭的Referer字段中包含一些非正確的字段,這個模塊可以禁止這個請求訪問站點。
這個頭可以隨意的偽造,因此,使用這個模塊並不能100%的阻止這些請求,絕大多數拒絕的請求來自一些典型的浏覽器,可以認為這些典型的浏覽器並不能提供一個”Referer”頭,甚至是那些正確的請求。
如下例:
location /photos/ { valid_referers none blocked www.mydomain.com mydomain.com; if ($invalid_referer) { return 403; } }
這裡只有一個重要的指令valid_referers:
這個指令在referer頭的基礎上為 $invalid_referer 變量賦值,其值為0或1。
可以使用這個指令來實現防盜鏈功能,如果valid_referers列表中沒有Referer頭的值, $invalid_referer將被設置為1(參照前例)。
參數可以使如下形式:
none意為不存在的Referer頭
blocked意為根據防火牆偽裝Referer頭,如:“Referer: XXXXXXX”。
server_names為一個或多個服務器的列表,0.5.33版本以後可以在名稱中使用“*”通配符。