使用 nginx 隱藏伺服器上映像的資料夾結構

使用 nginx 隱藏伺服器上映像的資料夾結構

我的伺服器上有以下資料夾層次結構:
/var/images/d/d8/d82fa6c3eed/image.png

目錄結構是根據 MD5 雜湊值建立的,並分為子資料夾。

我想使用 Nginx 向網路使用者提供圖像,但不想公開目錄結構。例如,我做不是想要像這樣提供文件:
http://domain.tld/d/d8/d82fa6c3eed/image.png

我想提供類似的服務:
http://domain.tld/b/4324re3fg34f6td/image.png

我也使用 nginxsecure link模組,但是你必須指定獲取圖像的目錄,如下所示:
http://domain.tld/b/<secure link MD5 hash>/path/to/file.png

被重寫為:
http://domain.tld/images/path/to/file.png?md5=<secure link md5>

我不想指定檔案系統上的實際特定目錄路徑來取得該檔案。我的想法如下:

  • 客戶端可以傳送某種代表檔案目錄路徑的MD5值,NGINX將每N個字元插入/。這可能嗎?
  • 發送以 base64 編碼的目錄路徑,讓 NGINX 對其進行解碼並在內部重定向到那裡。和這個?
  • 也許為此使用一個額外的模組,例如 openresty 模組?

我能實現這個目標嗎..?

我的 nginx 設定:

server {
    ..
    root /var/www/html;
    ..
    location /b/ {
        rewrite ^/b/([a-zA-Z0-9_\-]+)/([a-zA-Z0-9_\-]+)/(.*)$ /images/$2/$3?md5=$1 last;
    }
    location /images/ {
        internal;
        secure_link $arg_md5;
        secure_link_md5 '$uri mysecretkey';
        if($secure_link = "") { return 404; }
        if($secure_link = "0") { return 410; }
    }
}

答案1

我沒有使用過secure_link,所以我無法評論你提案的那部分。但配置中的一個明顯錯誤是rewrite...last,如果您希望區塊處理重寫的 URI,則應該使用location /images/。後綴break導致 URI 在同一位置進行處理。

這個文件了解詳情。

相關內容