Ordnerstruktur auf dem Server für Bilder mit nginx ausblenden

Ordnerstruktur auf dem Server für Bilder mit nginx ausblenden

Ich habe die folgende Ordnerhierarchie auf meinem Server:
/var/images/d/d8/d82fa6c3eed/image.png

Die Verzeichnisstruktur wird aus einem MD5-Hash erstellt und in Unterordner aufgeteilt.

Ich möchte die Bilder Webbenutzern mit Nginx bereitstellen, möchte aber die Verzeichnisstruktur nicht offenlegen. Ich mache zum Beispielnichtmöchte die Dateien folgendermaßen bereitstellen:
http://domain.tld/d/d8/d82fa6c3eed/image.png

Ich möchte es ungefähr so ​​servieren:
http://domain.tld/b/4324re3fg34f6td/image.png

Ich verwende auch das Nginx- secure linkModul, aber Sie müssen das Verzeichnis angeben, in dem das Image abgerufen werden soll, und zwar wie folgt:
http://domain.tld/b/<secure link MD5 hash>/path/to/file.png

das wird umgeschrieben in:
http://domain.tld/images/path/to/file.png?md5=<secure link md5>

und ich möchte nicht den tatsächlichen Verzeichnispfad in meinem Dateisystem angeben, um die Datei abzurufen. Ich habe mir Folgendes überlegt:

  • Der Client kann eine Art MD5-Wert senden, der den Verzeichnispfad zur Datei darstellt, und NGINX fügt alle N Zeichen ein / ein. Ist das möglich?
  • Senden Sie den in Base64 codierten Verzeichnispfad und lassen Sie ihn von NGINX decodieren und intern dorthin umleiten. Und das?
  • Vielleicht verwenden Sie hierfür ein zusätzliches Modul, etwa das OpenResty-Modul?

Kann ich das erreichen...?

Meine Nginx-Konfiguration:

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; }
    }
}

Antwort1

Ich habe es nicht verwendet secure_link, daher kann ich diesen Teil Ihres Vorschlags nicht kommentieren. Ein offensichtlicher Fehler in Ihrer Konfiguration ist jedoch, dass Sie es verwenden sollten, rewrite...lastwenn Sie möchten, dass die umgeschriebene URI vom location /images/Block verarbeitet wird. Das breakSuffix bewirkt, dass die URI am selben Ort verarbeitet wird.

Sehendieses Dokumentfür Details.

verwandte Informationen