Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

Nginx 防盜鏈三大實戰方案:valid_referers、目錄級防護、AccessKey 模組加密連結

編輯:關於伺服器

防盜鏈核心在於識別 Referer 標頭並拒絕非授權來源。Nginx 提供原生指令與第三方模組兩種實現路徑。

方案一:原生 valid_referers 全域/Location 級

location ~* \.(gif|jpg|png|swf|flv)$ {
    valid_referers none blocked www.example.com example.com;
    if ($invalid_referer) {
        rewrite ^/ https://www.example.com/403.html;
        # return 403;  # 或直接返回狀態碼
    }
}
  • none:允許無 Referer(直接瀏覽器輸入)
  • blocked:允許防火牆/代理過濾後的 Referer
  • 支援通配符 *.example.com

方案二:目錄級防護(圖片/下載目錄)

location /images/ {
    alias /data/images/;
    valid_referers none blocked server_names *.cdn.example.com;
    if ($invalid_referer) {
        return 403;
    }
}

方案三:ngx_http_accesskey_module 加密連結(高安全)

編譯安裝

wget https://github.com/nginx/nginx-accesskey-module/archive/v2.0.3.tar.gz
tar xzf v2.0.3.tar.gz
# 編輯 config 將 $HTTP_ACCESSKEY_MODULE 替換為 ngx_http_accesskey_module
./configure --add-module=../nginx-accesskey-module-2.0.3
make && make install

配置範例

location /download {
    accesskey on;
    accesskey_hashmethod md5;
    accesskey_arg "key";
    accesskey_signature "mysecret$remote_addr";
}

PHP 產生授權連結

<?php
$ipkey = md5("mysecret" . $_SERVER['REMOTE_ADDR']);
$url = "https://cdn.example.com/download/file.zip?key=" . $ipkey;
echo "<a href='$url'>安全下載</a>";
// 原始連結無 key 參數將返回 403
?>

方案對比選型

方案安全性效能維護性適用場景
valid_referers中(Referer 可偽造)極高(原生)簡單一般圖片/靜態資源防盜鏈
目錄級中極高簡單特定敏感目錄
AccessKey高(簽名含 IP+密鑰+時間)中(需計算雜湊)需應用層配合付費下載、私有內容、API 防刷

進階建議

  • 結合 limit_req 限制單 IP 請求頻率
  • CDN 回源配置 Referer 白名單,雙層防護
  • 定期輪換 accesskey_signature 密鑰
  • 監控 403/404 日誌發現異常爬蟲
Copyright © Windows教程網 All Rights Reserved