Ich bin von Apache zu Nginx migriert und möchte daher alle Regeln in Nginx festlegen.
Ziel:Leiten Sie eine URL mit demselben Dateinamen auf eine andere Domäne um, wenn die Datei nicht auf dem angeforderten Server gefunden wird.
Beispiel
Wenn ein Benutzer öffnethttps://www.example.com/data/1.jpgdann wird mein Server versuchen, "1.jpg" im "data"-Verzeichnis zu finden. Wenn diese Datei nicht gefunden wird, wird der Benutzer zur URL des Backup-Servers weitergeleitet, wiehttps://www.example2.com/backup/1.jpg
Beispiel in .htaccess
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.*) - [L]
RewriteRule (.*) https://example2.com/backup/$1 [L]
Was ich versucht habe
- Ich habe nach vorhandenen Lösungen gesucht, aber keine funktionierende Lösung gefunden.
- Versuchen Sie, die Apache-Konfiguration über Konverter in eine Nginx-Konfiguration zu konvertieren, aber es funktioniert nicht.
Einige haben es mit der Konfiguration versucht, aber es hat nicht funktioniert.
location ~ /data/.* {
if (-e $request_filename){
rewrite ^ https://www.example2.com/backup/$1 last;
}
}
location ~ /data/.* {
if (-e $request_filename){
rewrite ^ https://www.example2.com/backup/$1 permanent;
}
}
location ~ /data/.* {
try_files $uri https://www.example2.com/backup/$uri;
}
Antwort1
Ich habe die Lösung erhalten, nachdem ich die Antwort von @Rob geändert habe.
set $v_filename nf;
location ~ ^/data/(.*)$ {
try_files $uri @externalbackup;
set $v_filename $1;
}
location @externalbackup {
return 301 https://www.example2.com/backup/$v_filename ;
}
Antwort2
In nginx würden Sie einentry_files
Direktive, die den Inhalt einer lokalen Datei bereitstellt, wenn diese in einem (oder mehreren) lokalen Verzeichnissen vorhanden ist. Wenn keine Datei gefunden wird, erfolgt eine interne Umleitung zur im letzten Parameter angegebenen URI.
Da dies nicht extern umgeleitet werden kann, benötigen Sie ein wenig Trickserei und einen zweistufigen Ansatz. In den try_files-Optionen verwenden Sie den benannten Standort für diese interne Umleitung und erstellen von diesem benannten Standort aus die externe Umleitung.
location / {
try_files $uri @externalbackup;
}
location @externalbackup {
return 301 https://www.example2.com/backup$request_uri ;
}
Der obige Code ist ungetestet.