Nginx

Nginx 防止盜鏈異常

  • June 12, 2020

我正在嘗試實現下載盜鏈保護。

我有這個程式碼

   location /download/ {
     valid_referers  blocked  server_names  *.example.com;

     if ($invalid_referer) {
       return   403;
     }

工作正常,這允許指定域並阻止valid_referers中沒有的任何內容,有什麼問題?我想實現一個指定的 IP 允許使用 not referer 並阻止它。

這就是日誌顯示的內容。

1.2.3.4 - - - “GET file.doc HTTP/2.0” 200 13050 “-” “-”

我只想要 1.2.3.4 不接受任何推薦人。

為了防止盜鏈,允許空的引用字元串(直接下載)就足夠了。因此,您的配置可能如下所示:

valid_referers none blocked server_names *.example.com;

瀏覽器在載入嵌入在網頁中的圖像時,總是將 Referer 標頭添加到圖像請求中。

如果你真的想阻止直接下載圖片,那麼你需要在httpnginx 配置級別使用類似這樣的東西:

geo $blocked {
   default 1;
   1.2.3.4 0;
}

然後在server塊中:

location /download/ {
   valid_referers  blocked  server_names  *.example.com;

   set $refblocked $invalid_referer$blocked;

   if ($refblocked = "11") { # If value of both $invalid_referer and $blocked are 1, block access.
       return 403;
   }
}

在這裡,該geo模組用於將IP地址映射到變數值,並用於set組合成單個變數,在語句中進行測試。$invalid_referer``$blocked``if

我自己沒有測試過這個確切的配置,但原理應該有效。

引用自:https://serverfault.com/questions/1020968