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 link
Modul, 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...last
wenn Sie möchten, dass die umgeschriebene URI vom location /images/
Block verarbeitet wird. Das break
Suffix bewirkt, dass die URI am selben Ort verarbeitet wird.
Sehendieses Dokumentfür Details.