Nginx實現圖片防盜鏈(referer指令)

什麼是圖片盜鏈

 
  • 每張圖片在瀏覽器中都有對應的圖片地址,在瀏覽器中輸入這個地址是能夠直接拿到圖片。
  • 圖片盜鏈,就是盜用者在他的站上須要顯示咱們的圖片,他沒有把圖片拿下來,放到他的服務器上,
  • 而是直接就用咱們的,圖片地址,來請求到咱們的服務器來拿圖片,流量產生在咱們這邊。
 
referer

 
referer指令經過檢測訪問圖片的來源,來作出一些控制。
 
圖片訪問的來源
  • 經過谷歌/百度訪問
  • 經過瀏覽器直接訪問
  • 本站點的訪問
  • 來自非法的域名訪問
 
referer
  • nginx 模塊 ngx_http_referer_module 一般用於阻擋來源非法的域名請求.
  • 但咱們應該牢記,假裝 Referer 頭部是很是簡單的事情,因此這個模塊只能用於阻止大部分非法請求.
  • 咱們應該記住,有些合法的請求是不會帶 referer 來源頭部的,因此有時候不要拒絕來源頭部(referer)爲空的請求
 
 
圖片防盜鏈配置
location ~* \.(gif|jpg|png|bmp)$ {
      valid_referers none blocked *.ttlsa.com server_names ~\.google\. ~\.baidu\.;
     if ($invalid_referer) {
     return 403;
     #rewrite ^/ http://www.ttlsa.com/403.jpg;
     }
}
 
  • 以上全部來至 ttlsa.com 和域名中包含 google 和 baidu 的站點均可以訪問到當前站點的圖片,
  • 若是來源域名不在這個列表中,那麼$invalid_referer 等於 1,在 if 語句中返回一個 403 給用戶,
  • 這樣用戶便會看到一個 403 的頁面,若是使用下面的 rewrite,那麼盜鏈的圖片都會顯示 403.jpg。
  • 若是用戶直接在瀏覽器輸入你的圖片地址,那麼圖片顯示正常,由於它符合 none 這個規則.
 
參數說明
  • none
    • 「Referer」 來源頭部爲空的狀況
  • blocked
    • 「Referer」來源頭部不爲空,可是裏面的值被代理或者防火牆刪除了,這些值都不以 http://或者 https://開頭.
  • server_names
    • 「Referer」來源頭部包含當前的 server_names(當前域名)
  • regular expression
    • 正則表達式,~表示排除 https://或 http://開頭的字符串
相關文章
相關標籤/搜索