Behandeln Sie verschiedene statische Dateien mit Nginx in einem konkreten Verzeichnis

Behandeln Sie verschiedene statische Dateien mit Nginx in einem konkreten Verzeichnis

Ich erstelle eine Anwendung, bei der einige Dateien von der App selbst bereitgestellt werden. Ich bin nicht gut darin, serverseitige Dinge zu konfigurieren, daher sieht meine Nginx-Konfiguration folgendermaßen aus:

location ~* (.+)\.(\d+)\.(js|css|png|jpg|jpeg|gif)$ {
    try_files $uri $1.$3;
}

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml|txt)$ {
    access_log  off;
    expires     30d;
    root        /var/www/domain_tld/public;
}

Ich weiß, dass die zweite Regel dazu dient, die aufgelisteten Erweiterungen direkt von nginx aus bereitzustellen, und das ist cool, aber ich hätte gerne eine Regel, die besagt:

/data/photos/{string}/{name}.{extension}

Vielen Dank im Voraus

Antwort1

Ich gehe davon aus, dass Sie einen Standort-URI wie (.+)\.(\d+)\.(js|css|png|jpg|jpeg|gif)$für eine folgende Datei serverseitig bereitstellen möchten /data/photos/$1/$2.$3.

Dann ist es so einfach wie das (beachten Sie, dass ich den regulären Ausdruck leicht geändert habe. Möglicherweise lässt er sich verbessern, indem alle Fälle, die so nah wie möglich beieinander liegen, auf die Whitelist gesetzt werden):

location ~* ^/(?<string>.+)\.(?<name>\d+)\.(?<extension>js|css|png|jpg|jpeg|gif)$ {
    root /data/photos;
    try_files $string/$name.$extension =404;
}

Ein Aufruf der /myString.file.extURI liefert Inhalte von/data/photos/myString/file.ext

Beachten Sie, dass alle Nginx-Standorte mit beginnen /.

Denken Sie auch daran, dass jede Anfrage bearbeitet wird voneinzigerStandort, daher möchten Sie möglicherweise Ihre beiden zusammenführen, wenn sie gleichzeitig auf die Anfragen angewendet werden sollen.

verwandte Informationen