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

Nginx 防盜鏈配置詳解:基於 Referer 與 ngx_http_accesskey_module 兩種方案

編輯:Linux 教學

圖片、視頻、下載檔案等靜態資源被外站直接引用(盜鏈),會消耗源站頻寬並影響使用者體驗。Nginx 提供內建 valid_referers 指令與第三方 ngx_http_accesskey_module 兩種防盜鏈機制,本文詳細說明配置方法與適用場景。

方案一:基於 Referer 的基礎防盜鏈(內建模組)

location ~* \.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|webm)$ {
    valid_referers none blocked example.com www.example.com *.example.com;
    if ($invalid_referer) {
        rewrite ^/ https://example.com/403.html permanent;
        # return 403;  # 或直接回傳 403/404
    }
}

指令解析

指令/參數說明
~* \.(gif|jpg|...)$不區分大小寫匹配需保護的副檔名
valid_referers定義合法來源:none(無 Referer,如直接輸入網址)、blocked(防火牆/代理過濾 Referer)、域名列表(支援通配符)
$invalid_referer內建變數,Referer 不在白名單中時為 1
rewrite ... permanent301 導向自定義錯誤頁,避免直接 403 影響 SEO

優缺點

  • ✅ 配置簡單、無需編譯額外模組、效能損耗極低。
  • ❌ Referer 可偽造(curl -e、瀏覽器擴充套件),無法防惡意爬蟲。
  • ❌ 無法防止迅雷等多線程下載工具(偽造 Referer + 範圍請求)。

方案二:ngx_http_accesskey_module — 加密連結防盜鏈(進階)

需編譯 Nginx 時加入 --add-module=path/to/ngx_http_accesskey_module。

運作原理

  1. 後端程式(PHP/Python/Go)依演算法生成帶簽名的下載連結:
    https://cdn.example.com/download/file.zip?key=hmac_sha256(ip+timestamp+secret)
  2. Nginx 收到請求時,用相同演算法驗證 key 是否合法且未過期。
  3. 驗證通過才允許下載,否則回傳 403。

Nginx 配置範例

location /download/ {
    accesskey             on;
    accesskey_hashmethod  md5;
    accesskey_arg         "key";
    accesskey_signature   "mypass$remote_addr";
    # 簽名 = md5("mypass" + $remote_addr + $uri + $arg_timestamp)
}

優缺點

  • ✅ 連結含 IP、時間戳、密鑰簽名,極難偽造/共享;可設定過期時間(如 5 分鐘)。
  • ✅ 有效防迅雷等多線程下載(每線程 IP 相同但無法生成合法 key)。
  • ❌ 需重新編譯 Nginx;後端需同步實現簽名演算法;動態生成連結增加應用複雜度。

選擇建議

場景推薦方案
一般圖片/靜態資源防盜鏈、SEO 友善方案一
付費下載、私有視頻、高價值資源防盜鏈方案二
CDN 邊緣節點配合方案二(CDN 多支援 Edge 機能驗證)

結合 referer 白名單(允許搜尋引擎爬蟲)與 accesskey 加密連結,可構建分層防盜鏈體系。

Copyright © Windows教程網 All Rights Reserved