Nginx

使用 cloudflare 預防 nginx 盜鏈

  • May 15, 2020

我想防止在我的網站上盜竊。

但是,我也有 cloudflare 來服務我的網站。我不想使用 cloudflare 熱連結保護功能,因為它不能排除我允許圖像連結的外部域(以及將圖像重定向到拒絕熱連結的圖像)。因此,我想防止在我的伺服器級別進行熱連結。

問題是當我在我的伺服器中啟用它時,cloudflare 將重定向到拒絕熱連結的圖像,無論域是什麼,包括我自己的域。這是我使用的程式碼:

location ~* \.(gif|png|jpe?g)$ {

 # prevent hotlink
 valid_referers none blocked ~.google. ~.bing. ~.yahoo. allowed-domain.com, server_names ~($host);
 if ($invalid_referer) {
   rewrite (.*) /static/images/hotlink-denied.jpg redirect;
   # drop the 'redirect' flag for redirect without URL change (internal rewrite)
 }
}

location = /static/images/hotlink-denied.jpg { }

反正有沒有繞過圖像上的cloudflare?

圖像是您希望通過 CDN 傳遞的關鍵靜態資源。這減少了您的伺服器負載,並使您的網站為訪問者載入得更快。不過,這可能不適合某些案例。

我使用 CloudFlare 進行熱連結保護。和你一樣,當我關閉它時,Nginx 熱連結保護不起作用。我的配置看起來和你的很相似。

如果要啟用盜鏈,最好的方法是按照CloudFlare 的說明來啟用盜鏈。

您目前可以通過在 URL 中使用“hotlink-ok”參數來指定可以進行熱連結的某些 URL。因此,例如,您可以設置一個名為“hotlink-ok”的目錄,並將您想要可熱連結的圖像放入其中。就像是:

http://www.yoursite.com/images/hotlink-ok/someimage.jpg

選項二

下一個選項是創建一個子域,將其託管在 CloudFlare 下,但關閉熱連結保護。目前,這是在控制面板最右側的“內容保護”選項卡中完成的。

您在這裡有兩個子選項

  • 使用 CloudFlare CDN 託管和提供圖像(橙色雲)。這減少了您的伺服器負載和頻寬,但使圖像可供任何人使用。
  • 關閉記憶體(灰色雲),因此 CloudFlare 只是充當 DNS 伺服器。像您目前一樣使用 Nginx 進行熱連結保護。

我的 Nginx 配置

這是我的 Nginx 配置,它和你的一樣,不能通過 CloudFlare 工作。

# Cache images on the client. Don't log errors or access. Block hotlinking.
location ~*  \.(jpg|jpeg|png|gif|css|js|ico|woff|woff2)$ {
 valid_referers none blocked server_names ~($host) ~(googleusercontent|google|bing|yahoo);
 if ($invalid_referer) {
   rewrite (.*) /stop-stealing-images.png redirect;
   # drop the 'redirect' flag for redirect without URL change (internal rewrite)
 }

 # Set up caching - 8 days for static resources. Remove the old unnecessary Pragma and hide the server version
 add_header Cache-Control "public, max-age=691200, s-maxage=691200";
 more_clear_headers Server; more_clear_headers "Pragma"; more_clear_headers "Expires";
}

# This allows the "stop stealing images" image to be hotlinked
location = /stop-stealing-images.png { }

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